前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[DeeplearningAI笔记]第一章3.2-3.11浅层神经网络与激活函数的原理

[DeeplearningAI笔记]第一章3.2-3.11浅层神经网络与激活函数的原理

作者头像
演化计算与人工智能
发布2020-08-14 10:52:50
3900
发布2020-08-14 10:52:50
举报

3.2 神经网络表示

  • 对于一个由输入层,隐藏层,输出层三层所组成的神经网络来说,输入层,即输入数据被称为第 0 层,中间层被称为第 1 层,输出层被称为第 2 层.所以这个神经网络被称为两层神经网络,我们不把输入层当做一个标准的层.

3.3 计算神经网络的输出

对于输入层的输入,我们把输入看做是一个矩阵,对于第一层的第一个神经元结点,计算

W^T*x+b

3.4 多个样本例子中的向量化

  • 上一节讨论的是对于单个样本我们使用神经网络表示的方法,现在我们谈论的是对于多个输入样本的神经网络表示方法,类似的对于 m 个样本,我们只需要对其进行遍历即可.
  • 在图中[]括号表示神经元层数,()表示样本数.
  • 对于这些矩阵来说横向指标就对应了不同的训练样本,从左向右扫的时候,就扫过了整个训练集,在竖向中,竖向指标就对应了单一神经网络层里不同的节点.

3.6 激活函数

tanh function

  • Angnew NG 几乎不会使用 sigmoid 函数,因为 tanh 函数几乎在任何方面多更加强大,但是对于输出层例外,因为在二元分类中,你可以使用 sigmoid 函数作为输出层的激活函数.但是对于 sigmoid 函数和 tanh 函数都有的缺点是,当 z 非常大或者非常小的时候,这个函数的梯度/斜率会变得很小.

ReLU function

ReLU(修正线性单元)

经验法则

  • 如果你在做二元分类,那么 sigmoid 函数很适合作为输出层的激活函数,然后其他所有单元都用 ReLU(现在已经几乎成为了几乎函数的默认选择),如果你不确定隐藏层的激活函数是什么可以大胆的尝试使用 ReLU 函数.对于 ReLU 函数在负数时斜率为 0 的问题,也给出了解决方案,被称为带泄露的 ReLU(leaky ReLU).当 z 为负数时,函数不再为 0,它有一个很平缓的斜率.leaky ReLU 函数通常比 ReLU 函数更好.但是并没有 ReLU 函数这么常用.如果一定要选择一个激活函数,Angnew NG 通常使用 ReLU 函数.使用 ReLU 函数的优势在于其在正数范围的斜率恒定为 1,没有斜率接近 0 时减缓学习速率的情况.虽然对于 ReLU 函数来说其值在负数区间内的值是 0,但是在实际实践中,有足够多的隐藏单元令 z 大于 0.所以对大多数的训练样本来说还是相当快的.

总结

3.7 为什么需要非线性激活函数

  • 我们为什么一定要把神经网络计算得到的结果经过激活函数输出呢?而不是直接使
a^{[i]}=z^{[i]}

.其实使

a^{[i]}=z^{[i]}

有很官方的名字,称为恒等激活函数/线性激活函数.这样如果使用恒等激活函数,则会发现这是一种输入值的线性组合.在深度网络中,会发现,这不过是输入的简单的线性组合,还不如去掉所有的隐藏层,线性隐藏层一点用也没有.如果你要计算的是回归问题,也许可以在输出层使用线性激活函数.除此以外,几乎没有地方会用到线性激活函数.

3. 8 激活函数的导数

sigmoid function

  • 对于 sigmoid 函数设
g(z)=\frac{1}{1+e^{-z}}

,那么对于 g(z)函数来说

g^{'}(z)=g(z)(1-g(z))

这正好解释了,当 z 非常大的时候 g(z)趋向于 1,则此时

g^{'}(z)

趋向于 0,也就是说这时候函数会停止增长,类似于一条直线的形式.而在 z=0 时,

g^{'}(z)

会趋向于 1/4.

tanh function

  • 对于 tanh 函数设
g(z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}}

,那么对于函数

g^{'}(z)=1-(tanh(z))^{2}

ReLU function

  • 对于 ReLU 函数设
g(z)=max(0, z)

,

g^{'}(z)=
\begin{cases}0 & z<0 \\1 & z>0 \\undefine & z=0 \\\end{cases}

leaky ReLU

  • 对于 Leaky ReLU 函数设
g(z)=max(0.01z, z)

,

g^{'}(z)=
\begin{cases}0.01 & z<0 \\1 & z>0 \\undefine & z=0 \\\end{cases}

3.11 随机初始化

  • 随机初始化十分重要,对于 logistic regression 我们可以将权重设置为 0,但是如果将所有层权重设置为 0,在使用梯度下降法,那会完全无效.因为通过归纳法证明同一层的不同神经元如果都初始化为 0,那么经过相同的激活函数,在计算反向传播算法时,其下降梯度即
dz^{[i]}_{m}=dz^{[i]}_{n}

.即同一层不同神经元对于权重的下降梯度完全相同,这样一个隐藏层有多个神经元和隐藏层拥有一个神经元效果相同.解决这个的方法就是随机初始化参数.

  • 我们一般将 w 和 b 设置为很小的随机值,因为在方程 z=w*x+b 中,如果计算得到的 z 值过大,会落在 sigmoid 或者是 tanh 函数的平缓地带,这样使用梯度下降法时会非常慢.也会学习的非常慢.

参考资料

[1]

吴恩达老师课程原地址: https://mooc.study.163.com/smartSpec/detail/1001319001.htm

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DrawSky 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.2 神经网络表示
  • 3.3 计算神经网络的输出
  • 3.4 多个样本例子中的向量化
  • 3.6 激活函数
    • tanh function
      • ReLU function
        • 经验法则
          • 总结
          • 3.7 为什么需要非线性激活函数
          • 3. 8 激活函数的导数
            • sigmoid function
              • tanh function
                • ReLU function
                  • leaky ReLU
                  • 3.11 随机初始化
                    • 参考资料
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档