美文网首页
【深度学习DL】一、神经网络

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

作者: ChiangCMBA | 来源:发表于2019-06-27 17:11 被阅读0次

    神经网络

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

    • 分类:把数据划分成不同的类别
    • 回归:建立数据间的连续关系

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

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

    误差函数

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

    误差函数与梯度下降

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

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

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

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

    离散型(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

    • (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多类别交叉熵.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
    实现基本函数
    • Sigmoid 激活函数
      \sigma(x) = \frac{1}{1+e^{-x}}

    • 输出(预测)公式
      \hat{y} = \sigma(w_1 x_1 + w_2 x_2 + b)

    • 误差函数
      Error(y, \hat{y}) = - y \log(\hat{y}) - (1-y) \log(1-\hat{y})

    • 更新权重的函数
      w_i^{'} \longleftarrow w_i + \alpha (y - \hat{y}) x_i

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

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

    神经网络结构

    • 输入层: 包含了输入数据
      如果输入层有更多的节点,那么意味着处理的是更多维的数据。通常,如果输入层里有n个节点,那么处理的就是n维空间的数据。

    • 隐藏层:针对输入层的一系列模型
      如果有多个隐藏层,那么就形成了深度神经网络。


      神经网络结构_隐藏层.png
    • 输出层:
      如果输出层有多个节点,则意味着有多个输出。这就是有多种类别的分类模型。

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

    • 向输入、隐藏和输出层添加更多节点。
    • 添加更多层级。

    多类别分类

    前向反馈

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

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

    反向传播

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

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

    反向传播将包括:

    • 进行前向反馈运算。
    • 将模型的输出与期望的输出进行比较。
    • 计算误差。
    • 向后运行前向反馈运算(反向传播),将误差分散到每个权重上。
    • 更新权重,并获得更好的模型。
      继续此流程,直到获得很好的模型。

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


    反向传播

    相关文章

      网友评论

          本文标题:【深度学习DL】一、神经网络

          本文链接:https://www.haomeiwen.com/subject/spftqctx.html