• 吴恩达深度学习笔记(一) —— 神经网络简介


    相关博客:

    吴恩达机器学习笔记(四) —— BP神经网络

    (里面出现的内容,下面将不再重复)

    主要内容:

    一.单个样本向量化

    二.多个样本向量化

    三.激活函数及其导数

    四.随机初始化

    五.深层神经网络的前向与反向传播

    六.参数和超参数

    一.单个样本向量化

    如下神经网络,对于第一层的神经元,每个神经元的输出,即a的计算如下:

    但是这种每个神经元的输出都单独计算的方式显得很繁琐,至少在写代码的时候就很容易出错。为了简化表示和提高效率,需要将其向量化,即把每一层的神经元看成是一个整体(一组向量):

     

    二.多个样本向量化

    上面介绍了单个样本的向量化,如果有m个样本,那么可以使用一个for循环解决:

    (中括号里面的是第几层,小括号里面的是第几个样本)

    但是,能不能把这m个样本在进一步向量化呢?能,规则就是把样本以列的形式叠在一起形成一个输入矩阵X(以往我们习惯了样本以行的形式堆叠,但在神经网络中以列堆叠更加方便):

    这样,就能去掉代码中的for循环了:

    其中:

    三.激活函数及其导数

    1.sigmoid函数(没人用,因为|z|较大的时候,曲线的斜率非常小,梯度下降收敛变得非常慢。)

    2.tanh函数(效果比sigmoid好,因为均值为0,带有去中心化的功能。但似乎还是没什么人用):

    3.Relu函数(最多人用,但在z<0时不也斜率为0,梯度下降“降”不了吗?课程上说有方法可以使得z基本上大于0):

    4.leaky Relu函数:

    四.随机初始化

    在以往的机器学习算法中,我们习惯把参数都初始化为0,但是这种做法不能应用于神经网络,因为这会使神经网络失效。为何失效?请看下文分解:

    可知参数w代表着当前神经元或者说当前输入在下一层神经元所占的比重。对于第一层的两个神经元,如果我们把他们的参数w都设置为0,那么他们不管在前向传播还是在反向传播的过程中,干的事情、得到的结果都是一模一样的(根据对称性),所以神经网络就退化成一条“神经元链”了,一层中“多个神经元”就没有意义了。因此,需要随机初始化w,使得两个神经元“干的事情”不同。 

    五.深层神经网络的前向与反向传播

    对于以下深层神经网络:

    在前向传播的第l层,我们的工作是:输入a[l-1],输出a[l],同时将z[l]缓存起来,因为在反向传播的时候还要重新利用。如下:

    在反向传播的第l层,我们的工作是:

    所以,BP神经网络的训练过程可以归结为以下流程:

    六.参数和超参数

    参数:如线性回归中的w和b,这类通过训练数据得出取值的参数就直接称为参数,特点是无需人为设定,算法已经解决了它们的取值。

    超参数:如梯度下降的学习率α、正则项前面的参数C等等,这类无法通过算法去确定值,只能通过交叉检验取最优值或者直接根据人们经验而设定的参数,称为超参数。

  • 相关阅读:
    Android自定义Dialog
    Ubuntu中好用的中文输入法
    Android_去掉EditText控件周围橙色高亮区域
    Android中Bitmap,byte[],Drawable相互转化
    准备期末考试 博客不更了
    NYOJ5 Binary String Matching ——KMP
    hdu1420 Prepared for New Acmer ——快速幂
    点头1010 只包含因子2 3 5的数
    Constructing Roads ——最小生成树
    hdu1257 最少拦截系统 ——DP么?
  • 原文地址:https://www.cnblogs.com/DOLFAMINGO/p/9691203.html
Copyright © 2020-2023  润新知