用这篇文章解释一下我在了解深度学习时一些困惑我的点。 首先,我们都知道有的深度学习有一步为梯度下降,那什么是梯度下降? 答: 梯度下降可以理解为导数下降。 那为什么要进行梯度下降呢!?或者说进行导数下降的操作有什么用呢? 答: 梯度下降是机器学习算法中求解损失函数最常用的优化算法。可以这么说,梯度下降是为了求某个函数最小值时自变量对应的取值,这里的某个函数指的就是损失函数,也就是说,梯度下降是为了得到损失函数最小时所对应的自变量。 你又有疑问了,损失函数是什么? 答:损失函数是以算法为自变量,以误差值为函数值的函数。那么梯度下降是为了找到损失函数导数最小值时对应的自变量,如果讲损失函数看成一般的二元函数的话,也就是找到损失函数最低点的自变量,即我们想要的算法。 你可能会问,直接找到导数等于0的地方找最小值不就行了,为啥要梯度下降? 答:这个方法听起来最简单,时间复杂度也是最高的,如果数据很多的话,等你找到导数为0的点的时候可能深度学习都被淘汰了。那梯度下降是怎么求的呢?不断地改变自变量的值,使导数的绝对值一直在变化。当导数小于0时,就要让x大一点点,当导数大于0时,就要让x小一点点,这样做是为了不断的试探来找到导数接近0的自变量。 神经网络的训练过程是什么? 答:
1. 定义网络的结构,包含输入,输出,隐藏层
2. 初始化权重和偏置。
重复以下步骤:
3. 前向传播 ( forward propagation ),得到预测值
4. 计算损失函数 ( loss function ),计算预测误差
5. 反向传播 ( back propagation ),更新权重和偏置
直到最小化损失函数,且没有过拟合训练数据,则训练结束。
为什么要进行权重初始化? 答:不初始化的话会造成梯度消失或梯度爆炸。 常见的初始化方法: 1、pre-training 预训练 2、Xavier 初始化 3、He 初始化 4、Batch Normalization+随机初始化
|