神经网络基础—浅层神经网络

来源:互联网 发布:软件推广联盟 编辑:程序博客网 时间:2024/06/16 00:24

来源: coursera DeepLearningAI-Shallow Neural Network 课程的笔记整理

浅层神经网络

  • 浅层神经网络
    • 表达方式
    • 激活函数
      • 概述
      • 为何需要它
      • 常用激活函数的导数
  • 随机初始化参数向量

  • 可以将计算中的每一步视为神经网络的一个层。
  • 隐藏层:不被观察到的层,大多数指在计算中未被表述的层。

表达方式

  • 注意:输入不算层数。所以上层为一个2层神经网络
  • a[layer](example)node 用于表述一个神经元
  • 同时 我们一般采用计算层+ 激活层的方式来组建一个神经网络层。
  • 大多数情况下,层的深入仅仅是计算方式的重复而已。同时需要考虑梯度计算的梯度消失问题

激活函数

概述

  • 使用与隐藏层输出层的一个函数(大多情况使用非线性函数)
  • 隐藏层,可以考虑 tanha=ezezez+ez):使得得到的资料集中于0,并非0.5。方便后面的学习
  • 输出层,可以考虑Sigmod:使得得到值在0~1
  • 当然,全用ReLu也是一个大众的做法.
  • ReLu的升级版为leaky ReLu a=max(0.01z,z)(渗漏整流函数)

为何需要它

打破计算层的线性特性
现实中大多数时间映射是非线性的,没有标准的因果关系。只有在做线性回归才会考虑在输出层使用线性激活

常用激活函数的导数

ddzsigmod(z)=A(1A),A=sigmod(z)

ddztanh(z)=1(tanh(z))2

ddzRelu(z)=(0,z<01,z>0)

ddzLeakyRelu(z)=(0.01,z<01,z>0)

随机初始化参数向量

  • 不像之前训练逻辑回归时全0初始化参数原因:会让所有的隐藏神经元做相同的工作

  • 由于这种对称,反向传播后每个单元得到的梯度阵也是相同的

  • 最后导致所有的神经元都做相同的计算
    正确做法
  • W[1]=np.random.randn((shape))0.01。这样使得W每个元素初始化为很小的随机值
  • B则可以初始化为0,因为 W 参数阵已经可以让不同的单元做不同的工作
  • 使用小的数字原因:防止使用 tanh sigmod 这类激活函数,反向时使得到的梯度值过小,影响学习率。
原创粉丝点击