【深度学习DL】一、神经网络

2019-06-27  本文已影响0人  ChiangCMBA

神经网络

神经网络是机器学习中的一个模型,可以用于两类问题的解答:

感知器技巧 - 计算机如何“学习”分类?

整个数据集中的每一个点都会把分类的结果提供给感知器(分类函数),并调整感知器。——这就是计算机在神经网络算法中,找寻最优感知器的原理。

误差函数

因为误差暗示了如何进行正确的分类,因此误差的定义就变得尤为重要,这也被称为误差函数

误差函数与梯度下降

用什么作为误差函数比较合适?
用什么方式可以很好地告诉计算机当前的误差是多少?
如何定义误差函数?

误差函数提供给我们的预测值实际值之间的差异,但是这个差异如何指导我们权重的更新呢?我们的目标是找到最小的误差函数值来找到与实际值误差最小的预测值

在简单的线性方程中,我们可以通过判断“预测值与实测值相比是大了还是小了”来决定权重是增加还是减少。但是在更为复杂的非线性环境中呢?复杂的数学问题,我们就直接来看看学者们的解决策略。

假设一维问题是一条直线,那么二维问题就是一个平面,而三维问题就是一个曲面。曲面可以理解为有山峰也有低谷的地面,误差最小的地方就是低谷处,我们希望计算机找到的就是这个低谷的值。为了找到这个低谷,学者们发明了梯度下降

离散型(Discrete)与连续型(Continuous)预测

对于优化而言,连续型误差函数比离散型函数更好。为此,我们需要从离散型预测变成连续型预测。
sigmoid函数
{\sigma(x)} = {1 \over {1+{e^{-x}} }}

多类别分类和 Softmax

函数Softmax(x)是一个non-linearity,但它的特殊之处在于它通常是网络中的一次操作,这是因为它接受了一个实数向量并返回一个概率分布,其定义如下,定义x是一个实数的向量(正数或负数都无所谓,没有限制)。然后,第i个Softmax(x)的组成是
{softmax(x_i)= {exp{(x_i)}\over{\sum_k^nexp{(x_k)}} } }

输出是一个概率分布:每个元素都是非负的,并且所有元素的总和都是1

log_softmax

在softmax的结果上再做多一次log运算

最大似然率(Maximum Likelihood)

NLLLoss

negative log likelihood loss

交叉熵 (Cross-Entropy)-损失函数

交叉熵
我们遇到了某种规律,概率和误差函数之间肯定有一定的联系,这种联系叫做交叉熵。这个概念在很多领域都非常流行,包括机器学习领域。

交叉熵可以告诉我们模型的好坏。


Cross-Entropy-Formula.png

多类别交叉熵

Multi-Class_Cross-Entropy多类别交叉熵.png

Logistic 回归

所有机器学习的基石——对数几率回归算法。基本上是这样的:

计算误差函数:所有点的误差函数之和的平均值

计算误差函数.png 计算误差函数02.png
最小化误差函数

梯度下降

梯度下降算法背后的准则和数学原理。


梯度下降01.png

梯度计算

s型函数
{\sigma(x)} = {1 \over {1+{e^{-x}} }}
的倒数:
{σ^\prime(x)=σ(x)(1−σ(x))}

s型函数的导数.png

现在,如果有 m 个样本点,标为{x^{(1)}, x^{(2)}, \ldots, x^{(m)}, x (1),x (2),…,x (m)}, 误差公式是:
{E = -\frac{1}{m} \sum_{i=1}^m \left( y^{(i)} \ln(\hat{y^{(i)}}) + (1-y^{(i)}) \ln (1-\hat{y^{(i)}}) \right) }

预测是{ \hat{y^{(i)}} = \sigma(Wx^{(i)} + b)}.

我们的目标是计算{ E}在单个样本点 x 时的梯度(偏导数),其中 x 包含 n 个特征,即 {x = (x_1, \ldots, x_n)}

{ \nabla E =\left(\frac{\partial}{\partial w_1}E, \cdots, \frac{\partial}{\partial w_n}E, \frac{\partial}{\partial b}E \right) }

为此,首先我们要计算 {\frac{\partial}{\partial w_j} \hat{y}} .

{\hat{y} = \sigma(Wx+b)}, 因此:

梯度计算02.png

最后一个等式是因为和中的唯一非常量项相对于 {w_j}正好是 {w_j x_j}, 明显具有导数 {x_j}.

现在可以计算 {\frac {\partial} {\partial w_j} E}

梯度计算03.png

类似的计算将得出:(备注:下图公式缺少一个负号,且其为 m 个样本点时的公式)

【针对单个样本点时,E 对 b 求偏导的公式为:{ \frac {\partial} {\partial b} E=-(y -\hat{y}) }

梯度计算04.png

这个实际上告诉了我们很重要的规则。对于具有坐标{ (x_1, \ldots, x_n)}, 的点,标签{ y}, 预测{ \hat{y}}, 该点的误差函数梯度是{ (-(y - \hat{y})x_1}, {\cdots}, {-(y - \hat{y})x_n}, {-(y - \hat{y}) )}.
总之

{\nabla E(W,b) = -(y - \hat{y}) (x_1, \ldots, x_n, 1)}.

如果思考下,会发现很神奇。梯度实际上是标量乘以点的坐标!什么是标量?也就是标签和预测之间的差别。这意味着,如果标签与预测接近(表示点分类正确),该梯度将很小,如果标签与预测差别很大(表示点分类错误),那么此梯度将很大。请记下:小的梯度表示我们将稍微修改下坐标,大的梯度表示我们将大幅度修改坐标。
如果觉得这听起来像感知器算法,其实并非偶然性!

梯度下降算法推导与实现

梯度下降算法的实现.png
实现基本函数

b^{'} \longleftarrow b + \alpha (y - \hat{y})

==============================================

神经网络结构

多层级
并非所有神经网络都看起像上面的那样。可能会复杂的多!尤其是,我们可以执行以下操作:

多类别分类

前向反馈

前向反馈是神经网络用来将输入变成输出的流程

误差函数
和之前一样,神经网络将产生误差函数,最终我们需要最小化该误差函数。

反向传播

一个层级的所有输出变成下一层级神经元的输入。这一流程叫做前向传播(forward propagation)。

我们在神经网络中使用权重将信号从输入层传播到输出层。我们还使用权重将错误从输出层传播回网络,以便更新权重。这叫做反向传播(backpropagation)。

反向传播将包括:

链式法则
链式法则用于计算导数。


反向传播
上一篇下一篇

猜你喜欢

热点阅读