【深度学习DL】一、神经网络
神经网络
神经网络是机器学习中的一个模型,可以用于两类问题的解答:
- 分类:把数据划分成不同的类别
- 回归:建立数据间的连续关系
感知器技巧 - 计算机如何“学习”分类?
整个数据集中的每一个点都会把分类的结果提供给感知器(分类函数),并调整感知器。——这就是计算机在神经网络算法中,找寻最优感知器的原理。
误差函数
因为误差暗示了如何进行正确的分类,因此误差的定义就变得尤为重要,这也被称为误差函数。
误差函数与梯度下降
用什么作为误差函数比较合适?
用什么方式可以很好地告诉计算机当前的误差是多少?
如何定义误差函数?
误差函数提供给我们的预测值
与实际值
之间的差异,但是这个差异如何指导我们权重的更新呢?我们的目标是找到最小的误差函数值
来找到与实际值误差最小的预测值
。
在简单的线性方程中,我们可以通过判断“预测值与实测值相比是大了还是小了”来决定权重是增加还是减少。但是在更为复杂的非线性环境中呢?复杂的数学问题,我们就直接来看看学者们的解决策略。
假设一维问题是一条直线,那么二维问题就是一个平面,而三维问题就是一个曲面。曲面可以理解为有山峰也有低谷的地面,误差最小的地方就是低谷处,我们希望计算机找到的就是这个低谷的值。为了找到这个低谷,学者们发明了梯度下降
。
离散型(Discrete)与连续型(Continuous)预测
对于优化而言,连续型误差函数比离散型函数更好。为此,我们需要从离散型预测变成连续型预测。
sigmoid函数
多类别分类和 Softmax
函数Softmax(x)是一个non-linearity,但它的特殊之处在于它通常是网络中的一次操作,这是因为它接受了一个实数向量并返回一个概率分布,其定义如下,定义x是一个实数的向量(正数或负数都无所谓,没有限制)。然后,第i个Softmax(x)的组成是
输出是一个概率分布:每个元素都是非负的,并且所有元素的总和都是1
。
- (1)输出层输出之和为 1,因为输出层的输出之和为1,其中一项增加,其他所有项则会相应减少。
- (2)输出层全部输出均为正。
log_softmax
在softmax的结果上再做多一次log运算
最大似然率(Maximum Likelihood)
NLLLoss
negative log likelihood loss
交叉熵 (Cross-Entropy)-损失函数
交叉熵
我们遇到了某种规律,概率和误差函数之间肯定有一定的联系,这种联系叫做交叉熵。这个概念在很多领域都非常流行,包括机器学习领域。
交叉熵可以告诉我们模型的好坏。
Cross-Entropy-Formula.png
多类别交叉熵
Multi-Class_Cross-Entropy多类别交叉熵.pngLogistic 回归
所有机器学习的基石——对数几率回归算法。基本上是这样的:
- 获得数据
- 选择一个随机模型
- 计算误差
- 最小化误差,获得更好的模型
- 完成!
计算误差函数:所有点的误差函数之和的平均值
最小化误差函数
梯度下降
梯度下降算法背后的准则和数学原理。
梯度下降01.png
梯度计算
s型函数
的倒数:
现在,如果有 m 个样本点,标为, 误差公式是:
预测是.
我们的目标是计算在单个样本点 x 时的梯度(偏导数),其中 x 包含 n 个特征,即 。
为此,首先我们要计算 .
, 因此:
最后一个等式是因为和中的唯一非常量项相对于 正好是 , 明显具有导数 .
现在可以计算
梯度计算03.png类似的计算将得出:(备注:下图公式缺少一个负号,且其为 m 个样本点时的公式)
【针对单个样本点时,E 对 b 求偏导的公式为:】
这个实际上告诉了我们很重要的规则。对于具有坐标, 的点,标签, 预测, 该点的误差函数梯度是, , , .
总之
.
如果思考下,会发现很神奇。梯度实际上是标量乘以点的坐标!什么是标量?也就是标签和预测之间的差别。这意味着,如果标签与预测接近(表示点分类正确),该梯度将很小,如果标签与预测差别很大(表示点分类错误),那么此梯度将很大。请记下:小的梯度表示我们将稍微修改下坐标,大的梯度表示我们将大幅度修改坐标。
如果觉得这听起来像感知器算法,其实并非偶然性!
梯度下降算法推导与实现
梯度下降算法的实现.png实现基本函数
-
Sigmoid 激活函数
-
输出(预测)公式
-
误差函数
-
更新权重的函数
==============================================
神经网络结构
-
输入层: 包含了输入数据
如果输入层有更多的节点,那么意味着处理的是更多维的数据。通常,如果输入层里有n个节点,那么处理的就是n维空间的数据。 -
隐藏层:针对输入层的一系列模型
如果有多个隐藏层,那么就形成了深度神经网络。
神经网络结构_隐藏层.png -
输出层:
如果输出层有多个节点,则意味着有多个输出。这就是有多种类别的分类模型。
多层级
并非所有神经网络都看起像上面的那样。可能会复杂的多!尤其是,我们可以执行以下操作:
- 向输入、隐藏和输出层添加更多节点。
- 添加更多层级。
多类别分类
前向反馈
前向反馈是神经网络用来将输入变成输出的流程
。
误差函数
和之前一样,神经网络将产生误差函数,最终我们需要最小化该误差函数。
反向传播
一个层级的所有输出变成下一层级神经元的输入。这一流程叫做前向传播(forward propagation)。
我们在神经网络中使用权重将信号从输入层传播到输出层。我们还使用权重将错误从输出层传播回网络,以便更新权重。这叫做反向传播(backpropagation)。
反向传播将包括:
- 进行前向反馈运算。
- 将模型的输出与期望的输出进行比较。
- 计算误差。
- 向后运行前向反馈运算(反向传播),将误差分散到每个权重上。
- 更新权重,并获得更好的模型。
继续此流程,直到获得很好的模型。
链式法则
链式法则用于计算导数。
反向传播