learn-tech/专栏/从0开始学大数据/41从感知机到神经网络算法.md
2024-10-16 06:37:41 +08:00

106 lines
9.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
41 从感知机到神经网络算法
从机器学习模型角度看目前最简单的机器学习模型大概就是感知机了而最火热的机器学习模型则是神经网络。人工智能领域几乎所有炫酷的东西都是神经网络的成果有下赢人类最顶尖围棋棋手的AlphaGo、自动驾驶技术、聊天机器人、语音识别与自动翻译等。事实上神经网络和感知机是一脉相承的就像复杂的人体是由一个个细胞组成、复杂的大脑是由一个个神经元组成而神经网络正是由感知机组成的。
感知机
感知机是一种比较简单的二分类模型,将输入特征分类为+1、-1两类就像下图所示的一条直线将平面上的两类点分类。
二维平面上的点只有两个输入特征(横轴坐标和纵轴坐标),一条直线就可以分类。如果输入数据有更多维度的特征,那么就需要建立同样多维度的模型,高维度上的分类模型也被称为超平面。
感知机模型如下:
\[f(x)=sign(w\\cdot x+b)\]其中\(x\)代表输入的特征空间向量,输出空间是{-1, +1}\(w\)为权值向量,\(b\)叫作偏置,\(sign\)是一个符号函数。
\(w\\cdot x+b=0\)为超平面的方程,当感知机输出为+1表示输入值在超平面的上方当感知机输出为-1表示输入值在超平面的下方。训练感知机模型就是要计算出\(w\)和\(b\)的值,当有新的数据需要分类的时候,输入感知机模型就可以计算出+1或者-1从而进行分类。
由于输出空间只有{-1, +1}两个值,所以只有误分类的时候,才会有模型计算值和样本真实值之间的偏差,偏差之和就是感知机的损失函数。
\[L(w,b)=-\\sum\_{x\_{i}\\in M}{y\_i}({w\\cdot{x\_i}+b})\]其中\(M\)为误分类点集合误分类点越少损失函数的值越小如果没有误分类点损失函数值为0。求模型的参数\(w\)和\(b\),就是求损失函数的极小值。
数学上求函数的极小值就是求函数的一阶导数,但是感知机损失函数用统计求和函数表达,没办法计算解析解。机器学习采用梯度下降法求损失函数极小值,实质上就是求导过程的数值计算方法。
对于误分类点集合\(M\),损失函数\(L(w,b)\)变化的梯度,就是某个函数变量的变化引起的函数值的变化,根据感知机损失函数可知:
\[\\Delta\_{w}L(w,b)=-\\sum\_{x\_i\\in M}{y\_i x\_i}\]\[\\Delta\_{b}L(w,b)=-\\sum\_{x\_i\\in M}{y\_i}\]使用梯度下降更新\(w\)和\(b\),不断迭代使损失函数\(L(w,b)\)不断减小直到为0也就是没有误分类点。感知机算法的实现过程
1.选择初始值\(w\_0,b\_0\)。
2.在样本集合中选择样本数据\(x\_i,y\_i\)。
3.如果\(y\_i(w\\cdot x\_i+b)< 0\)表示\(y\_i\)为误分类点那么\(w = w +\\eta y\_i x\_i\)\(b = b +\\eta y\_i\)在梯度方向校正\(w\)\(b\)其中\(\\eta\)为步长步长选择要适当步长太长会导致每次计算调整太大出现震荡步长太短又会导致收敛速度慢计算时间长
4.跳转回2直到样本集合中没有误分类点 即全部样本数据\(y\_i(w\\cdot x\_i+b)\\geq 0\)
神经网络
我们现在所说的神经网络通常是指机器学习所使用的人工神经网络”,是对人脑神经网络的一种模拟人脑神经网络由许多神经元构成每个神经元有多个树突负责接收其他神经元的输出信号神经元细胞完成对输入信号的处理转换成输出信号通过突触传递给其他神经元
神经元细胞的输出只有0或者1两种输出但是人脑大约有140亿个神经元这些神经元组成一个神经网络前面的神经元输出作为后面的神经元输入进一步处理最终实现人类的智能
人脑神经元可以通过感知机进行模拟每个感知机相当于一个神经元使用\(sign\)函数的感知机输出也是只有两个值跟人脑神经元一样
\(x\_1,x\_2,x\_3\)相当于神经元的树突实现信号的输入\(sum()+b\)\(sign\)函数相当于神经元细胞完成输入的计算\(y\)是神经元的输出上图用数学形式表达的话是-
$\(y=sign(w\_1x\_1+w\_2x\_2+w\_3x\_3+b)\)$
它是感知机\(y=sign(w\\cdot x+b)\)向量展开形式
将感知机组成一层或者多层网络状结构就构成了机器学习神经网络下图就是一个两层神经网络
在多层神经网络中每一层都由多个感知机组成将输入的特征向量\(x\)传递给第一层的每一个感知机运算以后作为输出传递给下一层的每一个感知机直到最后一层感知机产生最终的输出结果这就是机器学习神经网络的实现过程通过模拟人脑神经网络利用样本数据训练每个感知机神经元的参数在某些场景下得到的模型可以具有不可思议的效果
以神经网络实现手写数字识别为例样本如下
这个手写数字样本中的每个数字都是一个28×28像素的图片我们把每个像素当作一个特征值这样每个数字就对应784个输入特征因为输出需要判别10个数字所以第二层输出层的感知机个数就是10个每个感知机通过0或者1输出是否为对应的数字
使用梯度下降算法利用样本数据可以训练神经网络识别手写数字计算每个感知机的\(w\)\(b\)参数值当所有的感知机参数都计算出来神经网络也就训练出来了这样对于新输入的手写数字图片可以进行自动识别输出对应的数字
训练神经网络的时候采用一种反向传播的算法针对每个样本从最后一层也就是输出层开始利用样本结果使用梯度下降算法计算每个感知机的参数然后以这些参数计算出来的结果作为倒数第二层的输出计算该层的参数然后逐层倒推反向传播计算完所有感知机的参数
当选择两层神经网络的时候原始感知机的\(sign\)函数表现并不太好更常用的是\(sigmoid\)函数
对于两层以上的多层神经网络\(ReLU\)函数的效果更好一些\(ReLU\)函数表达式非常简单
\[y=max(x,0)\]\(x\)大于0输出\(x\);当\(x\)小于0输出0。
神经网络根据组织和训练方式的不同有很多类型当神经网络层数比较多的时候我们称它们为深度学习神经网络前两年在人工智能领域大放异彩的围棋程序AlphaGo则是一种卷积神经网络
对于一个19×19的围棋棋盘在下棋过程中每个位置有黑空三种状态将其提取为特征就是神经网络的输入事实上输入特征还需要包括气吃等围棋规则盘面信息)。而输出设置19×19即361个感知机产生对应的落子然后将大量人类的棋谱即当前盘面下的最佳落子策略作为训练样本就可以训练出一个智能下棋的神经网络
但是这样根据人类棋谱训练得到神经网络最多就是人类顶尖高手的水平AlphaGo之所以能够碾压人类棋手还依赖一种叫蒙特卡洛搜索树的算法对每一次落子以后的对弈过程进行搜索判断出真正的最佳落子策略利用蒙特卡洛搜索树结合神经网络AlphaGo还可以进行自我对弈不断进行自我强化找到近乎绝对意义上的最优落子策略
小结
神经网络的应用目前在大数据领域越来越广泛很多传统机器学习模型的算法逐步尝试用神经网络代替一般说来传统的机器学习算法的结果是可以解释的KNN算法的分类结果为什么是这样贝叶斯分类的结果为什么是这样都是可以利用样本数据和算法来解释的如果分类效果不好是样本数据有问题还是算法过程有问题也都可以分析出来但是一般认为神经网络计算的结果是不可解释的为什么神经网络会分类输出这样的结果人们无法解释输出结果不满意也无法找到原因只能不断尝试
神经网络中每个感知机的参数可以通过训练获得也就是\(w\)\(b\)可以计算得到但是一个神经网络应该设置多少层每层应该有多少个感知机神经元这些参数必须要算法工程师设置因此这些参数也被称为超级参数超级参数如何设置目前还没有太好的方法只能依赖算法工程师的经验和不断尝试去优化
思考题
你认为强人工智能是否会出现呢人类有一天会被机器人统治吗
欢迎你点击请朋友读”,把今天的文章分享给好友也欢迎你写下自己的思考或疑问与我和其他同学一起讨论