机器学习-吴恩达笔记5

作者: 皮皮大 | 来源:发表于2019-11-29 15:07 被阅读0次

    在本章中主要介绍的内容包含:

    • 神经网络的代价函数
    • 前向传播法
    • 反向传播法
    • 梯度检验
    • 构建神经网络的基本步骤

    讲真的,难度是有的!!!!️️️


    神经网络代价函数

    参数解释

    对几个参数的标记进行说明解释

    • m:训练样本个数

    • x,y:输入和输出信号

    • L:代表神经网络层数

    • S_I ​:每层的神经元个数

    • S_l​:表示输出神经元个数

    QkEJc4.png

    分类讨论

    主要是两类:二分类和多类分类

    二类分类:​S_L=0,y=0/1;输出是一个实数

    K类分类:​S_L=k,y_i=1表示分到第​i类的情况。输出是一个多维向量

    代价函数

    逻辑斯蒂回归中的代价函数
    J(\theta)=-\frac{1}{m}\sum^m_{i=1}[y^{(i)}\log(h_\theta(x^{(i)}))+(1-y^{(i)})\log(1-h_\theta(x^{i}))]+\frac{\lambda}{2m}\sum^n_{j=1}\theta^2_j

    在逻辑斯蒂回归中,只有一个输出变量称之为标量scalar。但是在神经网络中会有多个输出变量,​h_\theta(x)是一个​K维的向量,假设函数​h_\theta(x) \in R^K;h_\theta(x)=i^{th} output;表示的是第​i个输出,代价函数为:

    J(\Theta)=-\frac{1}{m}[\sum^m_{i=1}\sum^h_{k=1}[y^{(i)}_k\log(h_\Theta(x^{(i)}))_k+(1-y^{(i)}_k)\log(1-h_\Theta(x^{i}))_k]+\frac{\lambda}{2m}\sum^{L-1}_{l=1}\sum^{s_l}_{i=1}\sum^{s_l+1}_{j=1}(\Theta_{ji}^{(l)})^2

    解释说明:

    1. 期望通过代价函数来观察算法预测的结果和真实情况的误差
    2. 每行特征会有K个预测,利用循环对每行进行预测
    3. K个预测中选择出可能性最高的那个,将其和实际的数据y进行比较
    4. 正则化项是排除了每个偏置\theta_0之后,每层\theta矩阵的求和
    5. 参数j(由s_l+1层的激活单元数决定)循环所有的行,i(由s_l层的激活单元数决定)循环所有的列

    反向传播法Backpropagation Algorithm

    QkuzP1.png

    为了计算神经网络中代价函数的偏导数\frac{\partial J(\Theta)}{\partial \Theta_{ij^{(l)}}},需要使用反向传播法

    • 首先计算最后一层的误差
    • 再一层层地反向求出各层的误差,直到倒数第二层

    前向传播栗子

    假设有一个数据样本(x^{(1)},y^{(1)}),神经网络是4层的,其中K=S_L=L=4

    QklGIH.png

    前向传播法就是通过一层层地按照神经网络的顺序从输入层到输出层计算下去。

    反向传播栗子

    Qk1h9A.png
    1. 从最后一层的误差开始计算:误差=激活单元的预测a^{(4)}和实际值之间的y^{(k)}之间的误差;用\delta表示误差,误差=模型预测值-真实值

    \delta^{(4)} = a^{(4)} -y

    1. 前一层的误差

    \delta^{(3)} = (\Theta^{(3)})^T\theta^{(4)}*g^`(z^{(3)})

    其中g^`(z^{(3)})S型函数的导数
    g^`(z^{(3)})=a^{(3)}*(1-a^{(3)})

    1. 再前一层的误差

    \delta^{(2)} = (\Theta^{(2)})^T\theta^{(3)}*g^`(z^{(2)})

    第一层是输入变量,不存在误差

    1. 假设\lambda=0,如果不做正则化处理时

    \frac{\partial J(\Theta)}{\partial \Theta_{ij}^{l}}=a_j^{(l)}\theta_i^{(l+1)}

    上面的式子中各个上下标的含义:

    l代表的是第几层

    j代表的是计算层中的激活单元的下标

    i代表的是误差单元的下标

    算法

    QkUlLR.png
    QkUlLR.png
    • 利用正向传播方法计算每层的激活单元
    • 利用训练集的真实结果与神经网络的预测结果求出最后一层的误差
    • 最后利用该误差运用反向传播法计算出直至第二层的所有误差。
    • 在求出\triangle ^{(l)}_{ij}之后,便可以计算代价函数的偏导数D^{(l)}_{ij}

    反向传播的直观理解

    前向传播原理

    • 2个输入单元;2个隐藏层(不包含偏置单元);1个输出单元

    • 上标​表示的是第几层,下标i表示的是第几个特征或者说属性

    图中有个小问题,看截图的右下角!!!

    Qk0qER.png

    结论

    Z^{(3)}_{1}=\Theta_{10}^{(2)}*1+\Theta_{11}^{(2)}*a^{(2)}_1+\Theta_{12}^{(2)}*a^{(2)}_2

    反向传播原理

    QkjDu8.png Qkj5uT.png

    参数展开

    上面的式子中实现了怎么利用反向传播法计算代价函数的导数,在这里介绍怎么将参数从矩阵形式展开成向量形式

    QkHoHs.png Qkb328.png

    梯度检验

    如何求解在某点的导数

    QkqNQO.png

    在代价函数中怎么对某个参数​求导

    Qkqq6U.png

    神经网络小结

    首要工作

    在构建神经网络的时候,首先考虑的是如何选择网络结构:多少层和每层多少个神经单元

    • 第一层的单元数即我们训练集的特征数量。

    • 最后一层的单元数是我们训练集的结果的类的数量。

    • 如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。

    训练神经网络步骤

    1. 参数的随机初始化

    2. 利用正向传播方法计算所有的​

    3. 编写计算代价函数 ​的代码

    4. 利用反向传播方法计算所有偏导数

    5. 利用数值检验方法检验这些偏导数

    6. 使用优化算法来最小化代价函数

    相关文章

      网友评论

        本文标题:机器学习-吴恩达笔记5

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