1、求导法则
2、链式法则(本质上就是复合函数求导)
3、雅可比矩阵(Jacobian matrix)
给定一组函数向量求雅克比数组:
eg:
二、梯度下降算法(Gradient descent)1、凸函数
(1)定义
(2)性质
2、 梯度下降
(1)算法
当f(x)是凸函数的时候,可以确保取得全局最小,当f(x)是非凸函数时候,f(x)取的可能的是局部最优。
(2) 梯度下降如何选择步长
既然梯度下降每次迭代都要走一定的步长,那这个步长要怎么选择呢?
一种简单的方式是把步长固定,每次都移动常数距离,(k = 1 , 2 , 3 , . .) 但是这样存在问题,如果t 太大,梯度下降可能会发散而不收敛;如果t 太小,梯度下降就会收敛很慢。只有t 选得“刚好”时,才能兼顾收敛性和收敛速度。另一种方法可以自适应地调整步长——回溯线性搜索
(3)梯度下降算法的优缺点
优点
- 方法简单,每次迭代都很快;
- 对于良态的,强凸问题有很快的收敛速度。
缺点
- 由于许多问题是非强凸或良态的,因此梯度下降往往需要很多次迭代,收敛速度很慢;
- 不能应对不可微的函数。
(1)算法
(2)SGD如何选择步长
通常SGD使用递减的步长,比如。如果使用固定步长,则在接近最优点时会很难继续收敛。
(3)平均误差
我们需要最小化平均误差:
但是计算全梯度最小平均误差开销太大, 所以采用计算样本梯度方法来对梯度估计,样本最小分支mini-batch的选取:
(4)SGD在大规模机器学习中的应用
- 在许多ML问题中,我们往往不需要优化到很高的精度,因此固定步长常常应用于ML中
- 一个trick是在整个数据集上运行SGD之前,先在一小部分上进行训练,从而选取合适的步长。
- 动量(mometum),自适应步长等许多SGD的变体都是实践中常用的方法(如Adagrad Adam等)
- SGD尤其流行于大规模、连续的非凸优化问题中
编辑对应网络图:
对应的输入矩阵、输出值,第一层和第二层的权重矩阵和:
2、我们先进行一遍正向传播
那么我们可以得到第一层的两个输出值:
计算最值的输出值:
那么最终的损失为 ,与0.5还有很大差距,下面我们将用反向传播技术去修正权重w和偏差b,使得损失最小。
3、反向传播
(1)首先我们有如下
(2)我们需要对损失函数C和权重w求导:
同理我们有:
(3)损失函数对权重的改变率
- 不难发现,当上一层激活输出接近0的时候,无论返回的误差有多大, 的改变都很小,这也就解释了为什么神经元饱和不利于训练。
- 从上面的推导我们不难发现,当输入神经元没有被激活,或者输出神经元处于饱和状态,权重和偏置会学习的非常慢,这不是我们想要的效果。这也说明了为什么我们平时总是说激活函数的选择非常重要。
(4)SGD用到反向传播中流程图:
五、深度学习遇见的挑战1、如何最小化损失函数:
2、当我们处理一个一个非常复杂复杂的目标函数
- 高度非线性和非凸函数
- 损失面非常复杂
- 许多局部最小值点,但鞍点的数量甚至成倍增加更多的
3、需要高效的优化器来解决
- SGD with momentum, Adagrad, Adadelta, RMSProp, Adam, and Nadam 是TF内置的优化函数。.



