• #Week7 Neural Networks : Learning


    一、Cost Function and Backpropagation

    神经网络的损失函数:

    [J(Theta) = - frac{1}{m} sum_{i=1}^m sum_{k=1}^K left[y^{(i)}_k log ((h_Theta (x^{(i)}))_k) + (1 - y^{(i)}_k)log (1 - (h_Theta(x^{(i)}))_k) ight] + frac{lambda}{2m}sum_{l=1}^{L-1} sum_{i=1}^{s_l} sum_{j=1}^{s_{l+1}} ( Theta_{j,i}^{(l)})^2 ]

    在这里插入图片描述
    这个cost function是在logistic regression基础上演变而来,只是神经网络有很多输出结点,而logistic regression只有一个输出结点,所以这个cost function只是把所有的K个输出结点的损失函数进行累加。

    得到cost function后,为了寻找使得(J( heta))最小的那组参数( heta),我们需要知道(J( heta))关于每个( heta)的偏导数,而后向传播算法可以帮助我们计算偏导数:
    在这里插入图片描述
    对于每个训练样本,先利用forward propagation计算每一层的(a)
    在这里插入图片描述
    接着利用样本真实标签(y^{(t)})计算最后一层的误差值;

    之后从右向左计算每一层(输入层除外)的误差:
    在这里插入图片描述
    这样每个样本一次正向、一次反向来更新误差矩阵:
    在这里插入图片描述
    向量化表示:
    在这里插入图片描述
    最后,就可以得到偏导数:
    在这里插入图片描述
    在这里插入图片描述

    二、Backpropagation in Pratice

    为了使用fminunc等高级的优化方法来求得cost function的最小值,所以将( heta)这个矩阵展成向量传入fminunc,完成后可以通过reshape从向量中提取( heta^{(1)}、 heta^{(2)})等:
    在这里插入图片描述

    为了确保我们使用Backpropagation求得的偏导数的正确性,可以使用Gradient Checking(很慢)来检验:
    根据偏导数定义:

    [dfrac{partial}{partialTheta_j}J(Theta) approx dfrac{J(Theta_1, dots, Theta_j + epsilon, dots, Theta_n) - J(Theta_1, dots, Theta_j - epsilon, dots, Theta_n)}{2epsilon} ]

    [一般epsilon=10^{-4} ]

    通过将这种方式计算的偏导数与之前Backpropagation求得的偏导数比较,即可得知Backpropagation的正确性。

    之前在Linear Regression和Logistic Regression,我们可以用全0来初始化( heta),但在神经网络中,这样做会有问题,所以采用随机初始化
    在这里插入图片描述
    最后,从整体捋一遍流程:
    1、选择网络结构:
    在这里插入图片描述
    2、训练神经网络:

    对每一个训练样本:
    在这里插入图片描述

  • 相关阅读:
    Android下拉刷新-SwipeRefreshLayout,RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout)
    自定义EditText实现一键删除数据
    Androidstudio 点9图报错的问题
    安卓Design包之CoordinatorLayout配合AppBarLayout,ToolBar,TabLaout的使用
    深入了解Hibernate的缓存使用
    跟大牛之间关于hibernate的一些探讨记录
    oracle第一招之神马都是浮云
    大鹏教你如何开发购物网站(里面都是满满的爱)
    JSTL&EL(程序员必看之一)
    动态网页开发
  • 原文地址:https://www.cnblogs.com/EIMadrigal/p/12130910.html
Copyright © 2020-2023  润新知