所谓人类的智能就是能根据已有的信息结合过往的经验逻辑去做判断,然后用这个判断去指导行动,再根据行动获得的反馈去修正判断,如此循环往复。
人工智能就是通过编程让计算机拥有接近人类的智能。
传统的计算机编程方式是人类自己总结经验,归纳成严谨的逻辑公式,然后用编程语言描述出来,编译成机器码交给计算机去执行。
机器学习是一种新的编程方式,它不需要人类来总结经验、输入逻辑,人类只需要把大量数据输入给计算机,然后计算机就可以自己总结经验归纳逻辑,这个过程就叫训练,训练过后得到一个模型,这个模型就可以用来代替人去做判断了,训练得比较好的模型甚至可以达到超过人类的判定准确度。
这种新的编程方式未来可能成为日常软件开发中常用的技术,用来解决一些传统编程方式不太好解决的问题。每个程序员都应该学一下机器学习。
举个例子:
十年前,2007年我在Nokia的时候遇到个问题,需要给当时的全屏手写输入法开发一个判定算法,因为输入法是全屏模式的,用户可以在整个屏幕上写字,但是屏幕上还是有一些可以点击的按钮的,比如回退,关闭,选择候选字之类的,所以要能区分用户到底想写一个笔画还是要点按钮。
当时用的方法是根据收集的大量用户书写行为数据,根据笔画的位置,长度,角度,书写时间等数据,用一些三角函数,对数,配合一堆系数(都是些初中代数几何知识)生成一个公式,公式的计算结果就是这个用户输入是点击还是笔画的概率。
这个公式不是我总结的,有专门的人做这个研究,我的工作只是把公式写成C++代码并调试通过。
如果用今天的观念来看,这就是一个典型的机器学习问题,训练一个分类器就可以解决。当时的研究者未必想不到用机器学习来解决,但他想到也没用,因为当时的硬件性能不足以运行机器学习的判定代码,当时的手机只有 400MHz的ARMV7单核,浮点运算性能也很差,内存也很小。现在的硬件平台已经没什么问题了,至少简单的浅层模型跑起来没压力。
如今各种机器学习的平台框架都很成熟,学习资料也很丰富,每个程序员都应该学一学。
其实入门并不难,下面是我前些日子学习机器学习入门的时候写的代码,用来训练一个分类器,用给定的三个边长判定这是不是一个合法三角形。代码只有30行,用Keras API开发,后端是Tensorflow。
如果已经安装部署了 Keras和Tensorflow,那么这个代码可以直接运行。
from keras.models import Sequential from keras.layers import Dense, Activation from keras import optimizers import numpy as np def isTriangle(a, b, c): return a + b > c and a + c > b and b + c > a data = np.random.random((1000, 3)) labels = np.zeros(1000) for x in range(0, 1000): if isTriangle(data[x][0], data[x][1], data[x][2]): labels[x] = 1 model = Sequential() model.add(Dense(32, activation='relu', input_dim=3)) model.add(Dense(1, activation='sigmoid')) model.compile(optimizers.RMSprop(lr=0.01, rho=0.1, epsilon=1e-07, decay=0.0), loss="binary_crossentropy", metrics=['accuracy']) model.fit(data, labels, epochs=50, batch_size=32) test_data = np.random.random((10, 3)) test_result = model.predict(test_data) print test_data print test_result score = model.evaluate(data, labels, batch_size=1) print "
Score: ", score 我承认,代码是从一些例子里摘抄的,参数是自己乱填的,这些代码我还不是每一行都能读懂,但是没关系,先有实践然后慢慢补充理论知识,这是我一贯的学习方法。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有