文章目录

  • 一、Neural Networks Overview
  • 二、神经网络计算过程
    • 1.单个样本
    • 2.多个样本
  • 三、激活函数
    • 1.如何选择合适的激活函数呢?
    • 2.激活函数为什么是非线性的?
    • 3.激活函数求导
  • 四、神经网络反向传播梯度计算
    • 1.单个训练样本推导
    • 2.m个训练样本
  • 五、权重随机初始化讨论
  • 六、总结

一、Neural Networks Overview

首先,我们从整体结构上来大致看一下神经网络模型。

前面的课程中,我们已经使用计算图的方式介绍了逻辑回归梯度下降算法的正向传播和反向传播两个过程。如下图所示。神经网络的结构与逻辑回归类似,只是神经网络的层数比逻辑回归多一层,多出来的中间那层称为隐藏层或中间层。这样从计算上来说,神经网络的正向传播和反向传播过程只是比逻辑回归多了一次重复的计算。正向传播过程分成两层,第一层是输入层到隐藏层,用上标[1]来表示:

第二层是隐藏层到输出层,用上标[2]来表示:


在写法上值得注意的是,方括号上标[i]表示当前所处的层数;圆括号上标(i)表示第i个样本。

同样,反向传播过程也分成两层。第一层是输出层到隐藏层,第二层是隐藏层到输入层。其细节部分我们之后再来讨论。

下面我们以图示的方式来介绍单隐藏层的神经网络结构。如下图所示,单隐藏层神经网络就是典型的浅层(shallow)神经网络。
结构上,从左到右,可以分成三层:输入层(Input layer),隐藏层(Hidden layer)和输出层(Output layer)。输入层和输出层,顾名思义,对应着训练样本的输入和输出,很好理解。隐藏层是抽象的非线性的中间层,这也是其被命名为隐藏层的原因。

二、神经网络计算过程

1.单个样本

接下来我们开始详细推导神经网络的计算过程。回顾一下,我们前面讲过两层神经网络可以看成是逻辑回归再重复计算一次。如下图所示,逻辑回归的正向计算可以分解成计算z和a的两部分:



2.多个样本

上一部分我们只是介绍了单个样本的神经网络正向传播矩阵运算过程。而对于m个训练样本,我们也可以使用矩阵相乘的形式来提高计算效率。而且它的形式与上一部分单个样本的矩阵运算十分相似,比较简单。

值得注意的是输入矩阵X也可以写成A[0]

三、激活函数

神经网络隐藏层和输出层都需要激活函数(activation function),在之前的课程中我们都默认使用Sigmoid函数σ(x)作为激活函数。其实,还有其它激活函数可供使用,不同的激活函数有各自的优点。下面我们就来介绍几个不同的激活函数g(x)

  • sigmoid函数
  • tanh函数
  • ReLU函数
  • Leaky ReLU函数

如上图所示,不同激活函数形状不同,a的取值范围也有差异。

1.如何选择合适的激活函数呢?

比较sigmoid函数和tanh函数

首先我们来比较sigmoid函数和tanh函数。
对于隐藏层的激活函数,一般来说,tanh函数要比sigmoid函数表现更好一些。因为tanh函数的取值范围在[-1,+1]之间,隐藏层的输出被限定在[-1,+1]之间,可以看成是在0值附近分布,均值为0。这样从隐藏层到输出层,数据起到了归一化(均值为0)的效果。因此,隐藏层的激活函数,tanh比sigmoid更好一些。
而对于输出层的激活函数,因为二分类问题的输出取值为{0,+1},所以一般会选择sigmoid作为激活函数。
观察sigmoid函数和tanh函数,我们发现有这样一个问题,就是当|z|很大的时候,激活函数的斜率(梯度)很小。因此,在这个区域内,梯度下降算法会运行得比较慢。在实际应用中,应尽量避免使z落在这个区域,使|z|尽可能限定在零值附近,从而提高梯度下降算法运算速度。

ReLU激活函数

为了弥补sigmoid函数和tanh函数的这个缺陷,就出现了ReLU激活函数。ReLU激活函数在z大于零时梯度始终为1;在z小于零时梯度始终为0;z等于零时的梯度可以当成1也可以当成0,实际应用中并不影响。
对于隐藏层,选择ReLU作为激活函数能够保证z大于零时梯度始终为1,从而提高神经网络梯度下降算法运算速度。但当z小于零时,存在梯度为0的缺点,实际应用中,这个缺点影响不是很大。为了弥补这个缺点,出现了Leaky ReLU激活函数,能够保证z小于零是梯度不为0。

总结

如果是分类问题,输出层的激活函数一般会选择sigmoid函数。
但是隐藏层的激活函数通常不会选择sigmoid函数,tanh函数的表现会比sigmoid函数好一些。实际应用中,通常会会选择使用ReLU或者Leaky ReLU函数,保证梯度下降速度不会太小。
其实,具体选择哪个函数作为激活函数没有一个固定的准确的答案,应该要根据具体实际问题进行验证(validation)。

2.激活函数为什么是非线性的?

上一部分讲的四种激活函数都是非线性(non-linear)的。那是否可以使用线性激活函数呢?答案是不行!下面我们就来进行简要的解释和说明。

假设所有的激活函数都是线性的,为了简化计算,我们直接令激活函数g(z)=z,即a=z。那么,浅层神经网络的各层输出为:

经过推导我们发现a[2]仍是输入变量x的线性组合。这表明,使用神经网络与直接使用线性模型的效果并没有什么两样。即便是包含多层隐藏层的神经网络,如果使用线性函数作为激活函数,最终的输出仍然是输入x的线性模型。这样的话神经网络就没有任何作用了。因此,隐藏层的激活函数必须要是非线性的。

另外,如果所有的隐藏层全部使用线性激活函数,只有输出层使用非线性激活函数,那么整个神经网络的结构就类似于一个简单的逻辑回归模型,而失去了神经网络模型本身的优势和价值。

值得一提的是,如果是预测问题而不是分类问题,输出y是连续的情况下,输出层的激活函数可以使用线性函数。如果输出y恒为正值,则也可以使用ReLU激活函数,具体情况,具体分析。

3.激活函数求导

在梯度下降反向计算过程中少不了计算激活函数的导数即梯度。
对于sigmoid函数的导数:

对于tanh函数的导数:

对于ReLU函数的导数:

对于Leaky ReLU函数:

四、神经网络反向传播梯度计算

接下来看一下在神经网络中如何进行梯度计算。

1.单个训练样本推导

我们仍然使用计算图的方式来推导神经网络反向传播过程。
对于单个训练样本,正向过程很容易,反向过程可以根据梯度计算方法逐一推导。

2.m个训练样本

浅层神经网络(包含一个隐藏层),m个训练样本的正向传播过程和反向传播过程分别包含了6个表达式,其向量化矩阵形式如下图所示:

五、权重随机初始化讨论

神经网络模型中的参数权重W是不能全部初始化为零的,接下来我们分析一下原因。

举个简单的例子,一个浅层神经网络包含两个输入,隐藏层包含两个神经元。如果权重W[1]和W[2]都初始化为零,即:


我们把这种权重W全部初始化为零带来的问题称为symmetry breaking problem。解决方法也很简单,就是将W进行随机初始化(b可初始化为零)。python里可以使用如下语句进行W和b的初始化:

W_1 = np.random.randn((2,2))*0.01
b_1 = np.zero((2,1))
W_2 = np.random.randn((1,2))*0.01
b_2 = 0

六、总结

本节课主要介绍了浅层神经网络。首先,我们简单概述了神经网络的结构:包括输入层,隐藏层和输出层。然后,我们以计算图的方式推导了神经网络的正向输出,并以向量化的形式归纳出来。接着,介绍了不同的激活函数并做了比较,实际应用中根据不同需要选择合适的激活函数。激活函数必须是非线性的,不然神经网络模型起不了任何作用。然后,我们重点介绍了神经网络的反向传播过程以及各个参数的导数推导,并以矩阵形式表示出来。最后,介绍了权重随机初始化的重要性,必须对权重W进行随机初始化操作。
转载自该处


如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论留言!


《神经网络与深度学习》课程笔记(4)-- 浅层神经网络相关推荐

  1. 吴恩达深度学习deeplearning.ai——第一门课:神经网络与深度学习——第三节:浅层神经网络

    3.1 神经网络概述(Neural Network Overview) 本章你将学习如何实现一个神经网络.在我们深入学习具体技术之前,我希望快速的带你预览一下本章你将会学到的东西.如果这个视频中的某些 ...

  2. 吴恩达深度学习课程笔记(初步认识神经网络)

    吴恩达深度学习课程笔记1 课程主要内容 1.神经网络与深度学习介绍 2.Improving Deep Neural Networks:超参数调整,正则化,优化方法 3.结构化机器学习工程:比如如何分割 ...

  3. 【人工智能】AI技术人才成长路线图;深度学习课程笔记

    人工智能浪潮来袭,开发者应该怎么办?不久前,在"AI生态赋能2018论坛"上,CSDN副总裁孟岩重磅发布了AI技术职业升级指南--<AI技术人才成长路线图>(V1.0) ...

  4. 吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究

    吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究 吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究 2.1 为什么要进行实例探究 2.2 经典网络 LeNet-5 AlexNet VGG- ...

  5. 吴恩达深度学习课程笔记之卷积神经网络(2nd week)

    0 参考资料 [1]  大大鹏/Bilibili资料 - Gitee.com [2] [中英字幕]吴恩达深度学习课程第四课 - 卷积神经网络_哔哩哔哩_bilibili [3]  深度学习笔记-目录 ...

  6. Deeplearning.ai深度学习课程笔记-在线版

    注意:请点击阅读原文 课程概述 课程视频离线版本可以到github:https://github.com/fengdu78/deeplearning_ai_books 查找下载. 课程地址:https ...

  7. 吴恩达老师的机器学习和深度学习课程笔记打印版

    注意:下载笔记.视频.代码:请点击"阅读原文" 我和同学将吴恩达老师机器学习和深度学习课程笔记做成了打印版,放在github上,下载后可以打印. 公布了深度学习笔记的word和ma ...

  8. 【深度学习】李宏毅2021/2022春深度学习课程笔记 - Deep Learning Task Tips

    文章目录 一.深度学习步骤回顾 二.常规指导 三.训练过程中Loss很大 3.1 原因1:模型过于简单 3.2 原因2:优化得不好 3.3 原因1 or 原因2 ? 四.训练过程Loss小.测试过程L ...

  9. deeplearing.ai 深度学习课程笔记

    deeplearing.ai 深度学习课程笔记 一.神经网络与机器学习 直观理解神经网络.随着神经网络层的加深,所提取的特征(函数)不断组合,最终得到更宏观.更复杂的所需要的特征.简单的例子比如房屋价 ...

  10. 【深度学习】李宏毅2021/2022春深度学习课程笔记 - Convolutional Neural NetWork(CNN)

    文章目录 一.图片分类问题 二.观察图片分类问题的特性 2.1 观察1 2.2 简化1:卷积 2.3 观察2 2.4 简化2:共享参数 - 卷积核 2.5 观察3 2.6 简化3:池化 2.6.1 M ...

最新文章

  1. java final 实例_Java中final实现原理的深入分析(附示例)
  2. ubuntu安裝opencv3.4.1
  3. 微型计算机原理及应用程序题,郑学坚《微型计算机原理及应用》(第4版)笔记和课后习题详解...
  4. Spring Cloud(6.1):搭建OAuth2 Authorization Server
  5. Python 实现简单的爬虫
  6. Spring3.1.1+Jersey2.2+ehcache实现WebApp与服务器接口交互获取令牌及校验过程
  7. Web后端学习笔记 Flask (14)redis
  8. sql azure 语法_Azure Kubernetes服务(AKS)–管理SQL Server数据库文件
  9. 程序员就要独“一”无“二”
  10. G20:奥巴马称美国拥有全球最大最好的网络武器库
  11. C++11 委托构造函数
  12. 【LeetCode】345. Reverse Vowels of a String 解题小结
  13. 计算机的组成 —— 显卡
  14. 【转】Filter Concatenation理解
  15. linux ascii游戏,linux – Bash ASCII实现
  16. 别人对你好是因为你有利用的价值,而我就不同了
  17. php下雨效果源码,ps下雨效果制作步骤
  18. 关于localhost404打不开
  19. Python:打包生成.pyc、.pyd文件
  20. 麦昆mciro:bit开发板机器人小车——支持makecode图形化编程,支持基于Mind+的图形化编程及python编程

热门文章

  1. ExtJs TreePanel使用TreeLoader在IE下无法正常加载显示的解决方法
  2. ehlib的DBGridEh控件中使用过滤功能的方法
  3. 快速排序 JAVA实现
  4. 《深入理解Java虚拟机》读书笔记二
  5. BZOJ2276: [Poi2011]Temperature
  6. 通过在jquery中添加函数发送ajax请求来加载数据库数据,以json的格式发送到页面...
  7. log4j教程 11、日志记录到文件
  8. nullnullUVa 10066 - The Twin Towers(LCS水题)
  9. 在浏览器上运行Qt应用 emscripten-qt
  10. asp.net 获取计算机启动时间