梯度下降
机器学习中很多其他技术也是基于梯度下降,梯度下降不仅是神经网络的基础。
目标实现手写数字识别
- (28 * 28 像素的矩阵 = 784 个网络输入层神经元)
- 每个像素的灰度值在0~1之间,决定了784个神经元的激活值。
- 下一层神经元的激活值=上一层中所有激活值的加权和 + bias
- 最后把这个作为参数传给sigmoid之类的压缩函数
图像分类,大量数据学习—>实际上是在找某个函数的最小值。
权重与偏差bias
- 权重像连接的强弱
- 偏置bias表明神经元是否更容易被激活
单个样本
开始,完全随机地初始化所有的权重和偏置值,网络的表现会很糟糕
这时,你需要定义一个cost function(代价函数)来告诉电脑 差的平方的和,称之为训练单个样本的代价
网络对图像正确分类时,这个平方和就很小。
多个样本
- 接下来你要考虑几万个样本中,代价的平均值—平均代价用来平均网络有多遭,电脑应该有多内疚
要记得,网络本身不过是个函数,有784个输入值,即像素的灰度,最后的输出值是10个数字。
所有的权重和偏置值为函数的参数
代价函数
怎么优化网络?
只告诉它有多遭没用,还得告诉它,怎么改变这些权重和偏置值,才能有进步?
- 一元函数时,求导直接算出来
- 多元函数时,怎么办?
- 此时要问,在输入空间内沿哪个方向走,输出才下降的最快?哪个方向下山最快
- 对于13000元的代价函数时,还求导吗?怎么办?
- 先随机选1个值,考虑往哪边,函数值才会变小,只能得到局部最小。
函数的梯度指出了函数的最陡增长方向 ,是说按梯度的方向走,函数值增长得越快,反之,降低得最快
梯度向量的长度代表了最陡的斜坡到底有多陡
我们有办法能算出这个梯度向量,它能够指出哪个方向下山最快 。(知道了这一点,具体细节掌握不牢靠也无所谓)
你只要懂得让函数值最小的方法,不过是先计算梯度,再按梯度反方向走一小步下山,然后循环。
处理13000个参数的函数也是一个道理
想象把想象把13000个权重和偏置值都放到一个列向量里,那么代价函数的负梯度也不过是个向量。
负梯度
- 正负号表示输入向量的这一项该调大还是调小
- 每一项的相对大小告诉我们改变哪个值的影响更大
调整某个权重,对输出的影响就比调整别的权重大得多。
代价函数的梯度向量
神经网络本身是一个带784个输入和10个输出的函数,由各种加权和定义的。
反向传播
这个计算梯度的算法是神经网络的核心,我们叫做反向传播back propagation(下个视频的内容)
单个训练数据会具体让每个权重和每个偏置产生怎样的变化?
网络学习,实质上就是让代价函数的值最小
梯度下降法:按照负梯度的倍数,不停调整函数输入值的过程。是一种让你收敛到代价函数图中某1个局部最小值的地方。
负梯度的每1项告诉了我们2件事情:
每一项的相对大小更告诉了我们改变哪个值的影响较大。
函数的梯度向量,可以理解为各个权重偏置的相对重要度。标记出了改变哪个参数 性价比最高。改变了哪些权重,影响力最大。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!