关键词:
转自:http://www.ruanyifeng.com/blog/2017/07/neural-network.html
眼下最热门的技术,绝对是人工智能。
人工智能的底层模型是"神经网络"(neural network)。许多复杂的应用(比如模式识别、自动控制)和高级模型(比如深度学习)都基于它。学习人工智能,一定是从它开始。
什么是神经网络呢?网上似乎缺乏通俗的解释。
前两天,我读到 Michael Nielsen 的开源教材《神经网络与深度学习》(Neural Networks and Deep Learning),意外发现里面的解释非常好懂。下面,我就按照这本书,介绍什么是神经网络。
这里我要感谢优达学城的赞助,本文结尾有他们的《前端开发(进阶)》课程的消息,欢迎关注。
一、感知器
历史上,科学家一直希望模拟人的大脑,造出可以思考的机器。人为什么能够思考?科学家发现,原因在于人体的神经网络。
- 外部刺激通过神经末梢,转化为电信号,转导到神经细胞(又叫神经元)。
- 无数神经元构成神经中枢。
- 神经中枢综合各种信号,做出判断。
- 人体根据神经中枢的指令,对外部刺激做出反应。
既然思考的基础是神经元,如果能够"人造神经元"(artificial neuron),就能组成人工神经网络,模拟思考。上个世纪六十年代,提出了最早的"人造神经元"模型,叫做"感知器"(perceptron),直到今天还在用。
上图的圆圈就代表一个感知器。它接受多个输入(x1,x2,x3...),产生一个输出(output),好比神经末梢感受各种外部环境的变化,最后产生电信号。
为了简化模型,我们约定每种输入只有两种可能:1 或 0。如果所有输入都是1,表示各种条件都成立,输出就是1;如果所有输入都是0,表示条件都不成立,输出就是0。
二、感知器的例子
下面来看一个例子。城里正在举办一年一度的游戏动漫展览,小明拿不定主意,周末要不要去参观。
他决定考虑三个因素。
- 天气:周末是否晴天?
- 同伴:能否找到人一起去?
- 价格:门票是否可承受?
这就构成一个感知器。上面三个因素就是外部输入,最后的决定就是感知器的输出。如果三个因素都是 Yes(使用1
表示),输出就是1(去参观);如果都是 No(使用0
表示),输出就是0(不去参观)。
三、权重和阈值
看到这里,你肯定会问:如果某些因素成立,另一些因素不成立,输出是什么?比如,周末是好天气,门票也不贵,但是小明找不到同伴,他还要不要去参观呢?
现实中,各种因素很少具有同等重要性:某些因素是决定性因素,另一些因素是次要因素。因此,可以给这些因素指定权重(weight),代表它们不同的重要性。
- 天气:权重为8
- 同伴:权重为4
- 价格:权重为4
上面的权重表示,天气是决定性因素,同伴和价格都是次要因素。
如果三个因素都为1,它们乘以权重的总和就是 8 + 4 + 4 = 16。如果天气和价格因素为1,同伴因素为0,总和就变为 8 + 0 + 4 = 12。
这时,还需要指定一个阈值(threshold)。如果总和大于阈值,感知器输出1,否则输出0。假定阈值为8,那么 12 > 8,小明决定去参观。阈值的高低代表了意愿的强烈,阈值越低就表示越想去,越高就越不想去。
上面的决策过程,使用数学表达如下。
上面公式中,x
表示各种外部因素,w
表示对应的权重。
四、决策模型
单个的感知器构成了一个简单的决策模型,已经可以拿来用了。真实世界中,实际的决策模型则要复杂得多,是由多个感知器组成的多层网络。
上图中,底层感知器接收外部输入,做出判断以后,再发出信号,作为上层感知器的输入,直至得到最后的结果。(注意:感知器的输出依然只有一个,但是可以发送给多个目标。)
这张图里,信号都是单向的,即下层感知器的输出总是上层感知器的输入。现实中,有可能发生循环传递,即 A 传给 B,B 传给 C,C 又传给 A,这称为"递归神经网络"(recurrent neural network),本文不涉及。
五、矢量化
为了方便后面的讨论,需要对上面的模型进行一些数学处理。
- 外部因素
x1
、x2
、x3
写成矢量<x1, x2, x3>
,简写为x
- 权重
w1
、w2
、w3
也写成矢量(w1, w2, w3)
,简写为w
- 定义运算
w?x = ∑ wx
,即w
和x
的点运算,等于因素与权重的乘积之和- 定义
b
等于负的阈值b = -threshold
感知器模型就变成了下面这样。
六、神经网络的运作过程
一个神经网络的搭建,需要满足三个条件。
- 输入和输出
- 权重(
w
)和阈值(b
)- 多层感知器的结构
也就是说,需要事先画出上面出现的那张图。
其中,最困难的部分就是确定权重(w
)和阈值(b
)。目前为止,这两个值都是主观给出的,但现实中很难估计它们的值,必需有一种方法,可以找出答案。
这种方法就是试错法。其他参数都不变,w
(或b
)的微小变动,记作Δw
(或Δb
),然后观察输出有什么变化。不断重复这个过程,直至得到对应最精确输出的那组w
和b
,就是我们要的值。这个过程称为模型的训练。
因此,神经网络的运作过程如下。
- 确定输入和输出
- 找到一种或多种算法,可以从输入得到输出
- 找到一组已知答案的数据集,用来训练模型,估算
w
和b
- 一旦新的数据产生,输入模型,就可以得到结果,同时对
w
和b
进行校正
可以看到,整个过程需要海量计算。所以,神经网络直到最近这几年才有实用价值,而且一般的 CPU 还不行,要使用专门为机器学习定制的 GPU 来计算。
七、神经网络的例子
下面通过车牌自动识别的例子,来解释神经网络。
所谓"车牌自动识别",就是高速公路的探头拍下车牌照片,计算机识别出照片里的数字。
这个例子里面,车牌照片就是输入,车牌号码就是输出,照片的清晰度可以设置权重(w
)。然后,找到一种或多种图像比对算法,作为感知器。算法的得到结果是一个概率,比如75%的概率可以确定是数字1
。这就需要设置一个阈值(b
)(比如85%的可信度),低于这个门槛结果就无效。
一组已经识别好的车牌照片,作为训练集数据,输入模型。不断调整各种参数,直至找到正确率最高的参数组合。以后拿到新照片,就可以直接给出结果了。
八、输出的连续性
上面的模型有一个问题没有解决,按照假设,输出只有两种结果:0和1。但是,模型要求w
或b
的微小变化,会引发输出的变化。如果只输出0
和1
,未免也太不敏感了,无法保证训练的正确性,因此必须将"输出"改造成一个连续性函数。
这就需要进行一点简单的数学改造。
首先,将感知器的计算结果wx + b
记为z
。
z = wx + b
然后,计算下面的式子,将结果记为σ(z)
。
σ(z) = 1 / (1 + e^(-z))
这是因为如果z
趋向正无穷z → +∞
(表示感知器强烈匹配),那么σ(z) → 1
;如果z
趋向负无穷z → -∞
(表示感知器强烈不匹配),那么σ(z) → 0
。也就是说,只要使用σ(z)
当作输出结果,那么输出就会变成一个连续性函数。
原来的输出曲线是下面这样。
现在变成了这样。
实际上,还可以证明Δσ
满足下面的公式。
即Δσ
和Δw
和Δb
之间是线性关系,变化率是偏导数。这就有利于精确推算出w
和b
的值了。
深度学习入门2022最新版深度学习简介(代码片段)
...器学习是什么深度学习是什么机器学习和深度学习的区别神经网络机器学习实现二分类神经网络实现二分类TensorFlowPyTorch神经网络的原理张量张量最小值(补充)张量最大值(补充)前向传播损失计算反向传播梯度下降案例线性回归公... 查看详情
机器学习算法(代码片段)
...支持向量机(SVM)1.基本概念2.代码实现五全连接神经网络DNN1.基本概念全连接神经网络前向传播全连接神经网络反向传播2.代码实现知识补充损失函数回归分析总结一、线性回归1.基本概念线性回归是回归问题中的一种... 查看详情
机器学习svm算法入门(代码片段)
目录1SVM算法简介1.1SVM算法导入1.2SVM算法定义1.2.1定义1.2.2超平面最大间隔介绍1.2.3硬间隔和软间隔1.2.3.1硬间隔分类1.2.3.2软间隔分类1.3小结2SVM算法api初步使用1SVM算法简介1.1SVM算法导入在很久以前的情人节,大侠要去救他的爱... 查看详情
机器学习入门之四:机器学习的方法-神经网络(转载)
转自 飞鸟各投林 神经网络 神经网络(也称之为人工神经网络,ANN)算法是80年代机器学习界非常流行的算法,不过在90年代中途衰落。现在,携着“深度学习”之势,神经网络重装归来,重新成为最强大... 查看详情
《机器学习算法入门》即将上市出版,预计2020年6,7月份
...K-means聚类算法、随机森林、贝叶斯算法、支持向量机、神经网络(卷积神经网络、Keras深度学习框架)、人脸识别入门等。从最简单的常识出发来切入AI领域,打造无缝平滑的兴奋的学习体验。本书的读者,只需具备Python语言的... 查看详情
机器学习的相关算法了解和总结(代码片段)
...习的一般步骤2、相关算法3、决策树4、支持向量机SVM5、神经网络6、随机森林算法机器学习的相关算法了解和总结1、机器学习的一般步骤训练集训练->提取特征向量->结合一定的算法(比如决策树、KNN)->得到结果机器学习... 查看详情
机器学习--入门介绍(代码片段)
...一:ARTHURSAMUL显著式编程⭐定义二:TomMitshell一、机器学习的分类监督学习分类一传统的监督学习非监督学习半监督学习⭐⭐分类二分类问题回归问题强化学习总结二、机器学习算法过程第一步:特区特征(FeatureEx... 查看详情
吴裕雄python机器学习——人工神经网络感知机学习算法的应用(代码片段)
importnumpyasnpfrommatplotlibimportpyplotaspltfromsklearnimportneighbors,datasetsfrommatplotlib.colorsimportListedColormapfromsklearn.neural_networkimportMLPClassifier##加载数据集np.random.seed(0)#使用scikit 查看详情
sklearn机器学习基础(day02基础入门篇)(代码片段)
文章目录基本算法使用(Sklearn)算子API调用分步曲数据分析分步曲分类算法KNN算法网格优化KNN案例(预测facebook签到位置)数据清洗KNN处理预测完整代码朴素贝叶斯算法决策树案例可视化决策树随机森林回归与聚类算... 查看详情
机器学习:从入门到晋级(代码片段)
摘要:什么是机器学习,为什么学习机器学习,如何学习机器学习,这篇文章都告诉给你。目前,人工智能(AI)非常热门,许多人都想一窥究竟。如果你对人工智能有所了解,但对机器学习(MachineLearning)的理解有很多的困惑... 查看详情
机器学习的相关算法了解和总结(代码片段)
...习的一般步骤2、相关算法3、决策树4、支持向量机SVM5、神经网络6、随机森林算法机器学习的相关算法了解和总结1、机器学习的一般步骤训练集训练->提取特征向量->结合一定的算法(比如决策树、KNN)->得到结果机器学习... 查看详情
转:机器学习算法原理解析-分类(代码片段)
...;线性判别法,即逻辑回归算法;决策树;支持向量机;神经网络;1. KNN分类算法原理及应用1.1 KNN概述K最近邻(k-NearestNeighbor,KNN)分类算法是最简单的机器学习算法。KNN算法的指导思想是“近 查看详情
机器学习入门knn分类算法|附加小练习(代码片段)
目录1.聚类与分类1.1聚类1.2分类2.关于KNN算法2.1`Lp距离`定义:2.1`K`值的选取3.练习第一题:第二题:最后1.聚类与分类1.1聚类聚类是将数据对象的集合分成相似的对象类的过程。使得同一个簇(或类... 查看详情
基于神经网络和遗传算法的飞鹦鹉机器学习(代码片段)
这是一个HTML5项目的源代码,该项目使用神经网络和遗传算法在FlappyBird视频游戏中实现机器学习算法。该程序教一只小鸟如何以最佳方式拍打,以便尽可能长时间地安全地飞过障碍物。所有代码都是用HTML5编写的,使... 查看详情
14深度学习-卷积(代码片段)
...一种实现机器学习的技术和学习方法。 2. 全连接神经网络与卷积神经网络的联系与区别。解析:卷积神经网络也是通过一层一层的节点组织起来的。和全连接神经网络一样,卷积神经网络中的每一个节 查看详情
机器学习算法之dcgan(代码片段)
...络GAN中一种常见的模型结构。其中的生成器和判别器都是神经网络模型。GAN是一种生成式对抗网络,即通过对抗的方式,去学习数据分布的生成式模型。所谓的对抗,指的是生成网络和判别网络的互相对抗。生成网络尽可能生成... 查看详情
spark学习10_1sparkmllib入门与相关资料索引(代码片段)
...eans聚类算法SVM算法其他算法实例的文件目录位置资料Spark机器学习库(MLlib)中文指南关于spark机器学习的知乎专栏Spark入门实战系列--8.SparkMLlib(上)--机器学习及SparkMLlib简介基本Kmeans算法介绍及其实现sparkMLlib概念1:相关系数... 查看详情
三天爆肝快速入门机器学习:knn算法朴素贝叶斯算法决策树第二天(代码片段)
三天爆肝快速入门机器学习【第二天】转换器与预估器KNN算法决策树随机森林个人总结转换器与预估器必须理解的转换器与估计器一转化器回想一下之前做的特征工程的步骤?实例化(实例化的是一个转换器类transformer)... 查看详情