zoukankan      html  css  js  c++  java
  • 神经网络深层网络实现

    神经网络深层网络实现

    步骤

    1. 随机初始化数据
      • 对于权重(W^{[l]}), 一般采用(np.random.randn(l, l - 1) * sqrt{{1over{dimension of previous layer}}})
      • 如果当前的(l)层的激活函数为(ReLU), 则使用(He initialization), 也就是(np.random.randn(l, l - 1) * sqrt{{2over{dimension of previous layer}}})
      • 对于偏移量(b^{[l]}), 一般采用(np.zeros((l, 1)))
    2. 确定迭代次数
    3. 进入迭代循环
    4. 前向传播, 主要目的是计算出AL
      • 在神经网络中会有很多层, 如果要通过一个函数直接前向传播到最后一层得到AL太返回, 一般定义一个辅助函数, 该辅助函数计算特定一层的输出值, 并在循环中调用该函数
      • 如:
        • linear_activation_forward: 辅助函数
        • L_model_forward: 主函数
      • 分辅助函数的好处:
        • 降低编码的复杂度
        • 可以方便为每个层定义定义不同的(activate function)
    5. 计算Cost
    6. 计算(dAL), 目的是初始化反向传播的起点
    7. 反向传播, 主要目的是计算出grads
      • 与第4点一样, 我们一般定义一个辅助函数, 该辅助函数计算特定一层的梯度, 并在循环中调用该函数
      • 如:
        • linear_activation_backward: 辅助函数
        • L_model_backward: 主函数
      • 分辅助函数的好处:
        • 降低编码的复杂度
        • 可以方便为每个层定义定义不同的(activate function)
    8. 更新参数
    9. 达到了指定的迭代次数, 退出循环

    附加操作

    正则化

    • L2正则化:

      • 影响cost和back propagation
      • 在训练集和测试集中都会使用
    • Dropout正则化:

      • 影响forward propagation和back propagation
      • 只能在训练集中使用
      • 原理
        • 在前向传播的时候, 设定一个keep_prob参数, 当keep_prob为1表示保留, 在0-1之间表示有特定的概率被保留, 如果被删除, 也只是将我们原来得到的激活函数的值变为0
        • 在反向传播的时候, 依据前向传播, 得到的dA1等也要对应的为0或者其他
      • 应用: 在计算机视觉中十分常见

      激活函数选择

    • hidden layer中不会使用(sigmoid function), 但是在output layer, 如果是一个二分类问题, 使用(sigmoid function)

    • 一般地, 在hidden layer使用ReLU或者tanh

    • ReLU的导数: np.int64(relu(Z) > 0)

    Optimization Methods

    Mini-Batch

    • mini-batch size指的是一个mini-batch中含有的样本数量

    • 如果mini-batch size=m, 则为梯度下降, 当m很大的时候, 效率低

    • 如果mini-batch size=1, 则为随机梯度下降, 在下降的过程中有很多噪音; 会失去向量化的加速效果

    • 选择:

      • mini-batch size一般为64-512, 离散来讲为(2^6), (2^7), (2^8)
      • 如果数据量较小, 则直接使用batch梯度下降

    核对矩阵的维度

    • 参考:

      • (A^{[l]})(n_l imes m)维的矩阵
      • (W^{[l]}, W^{[l + 1]})都是矩阵
      • (X^{[l]})(n_x imes m)维的矩阵
    • 在向量公式中, 如果是一个列向量, 则在转为矩阵的时候将他们按照axis=1的方向堆积

    • 在向量公式中, 如果是一个行向量, 则在转为矩阵的时候将他们按照axis=0的方向堆积

    全连接神经网络公式

    • 前向传播
    • 反向传播
      • (dA^{[L]}=-({Yover{A^{[L]}}} - {{1 - Y}over{1 - A^{[L]}}})), 进行反向传播初始化, 这个是必须的, 这里是(sigmoid)函数的对(A^{[L]})的梯度
      • 现在假设共2层, 1层hidden layer, 1层output layer
      • (dZ^{[2]}=dA^{[2]}.*g'(Z^{[2]})=A^{[2]}-Y)
      • (dW^{[2]}={1over m}dZ^{[2]}(A^{[1]})^T)
      • (db^{[2]}={1over m}dZ^{[2]})
      • (dZ^{[1]}=dA^{[1]}.*g'(Z^{[1]}))
      • (dW^{[1]}={1over m}dZ^{[1]}X^T)
      • (db^{[1]}={1over m}dZ^{[1]})
      • 发现, 在公式中出去第一个公式, 凡是出现(A)的, 它的层数与公式中的其他层数少一

    梯度检测

    • 使用传统的方法, 也就是导数的定义计算出梯度, 与反向传播计算的梯度相减, 如果在阈值内则合法
  • 相关阅读:
    leetcode Super Ugly Number
    leetcode Find Median from Data Stream
    leetcode Remove Invalid Parentheses
    leetcode Range Sum Query
    leetcode Range Sum Query
    leetcode Minimum Height Trees
    hdu 3836 Equivalent Sets
    hdu 1269 迷宫城堡
    hud 2586 How far away ?
    poj 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/megachen/p/11154777.html
Copyright © 2011-2022 走看看