1.神经网络概述和表示

在下图中,上标 [ 1 ] 、 [ 2 ] [1]、[2] [1]、[2]表示当前神经网络的层数,并不是前面提到的样本个数。 a [ 1 ] a^{[1]} a[1]表示第一层的激活值,图中可以表示为 a [ 1 ] = [ a 1 [ 1 ] 、 a 2 [ 1 ] 、 a 3 [ 1 ] ] T a^{[1]}=[a^{[1]}_1、a^{[1]}_2、a^{[1]}_3]^T a[1]=[a1[1]​、a2[1]​、a3[1]​]T,以此类推。该网络被称为双层神经网络(因为一般不把输入层视为其中一层):

部分细节可以参考吴恩达机器学习课程-第四周中第2

2.神经网络的输出计算

2.1 单个样本的输出

对于上述的双层神经网络,输入层到第一层的前向计算过程如下:

如果采用for循环去计算明显效率低下,此时需要将等式向量化。此时将 w w w堆积为 4 ∗ 3 4*3 4∗3的矩阵(每一行可以视为一个神经元的向量表示), b b b则为 4 ∗ 1 4*1 4∗1的向量:

最终整个神经网络可以全部表示为向量运算,其中输入 x x x可以表示为 a [ 0 ] a^{[0]} a[0]:

2.2 多个样本的输出

首先明确符号 a [ 2 ] ( i ) a^{{[2]}(i)} a[2](i)中的 ( i ) (i) (i)表示第 i i i个样本, [ 2 ] [2] [2]表示该单元处于神经网络的层数。如果使用for循环去计算训练集所有样本在神经网络中的输出:

进行向量化的话就可以不需要写 ( i ) (i) (i),而是直接将输入 x x x和输出 z 、 a z、a z、a从向量拼接为矩阵:

3.激活函数

3.1 激活函数种类

在前面使用到的激活函数全是 s i g m o i d sigmoid sigmoid函数,即 σ ( z ) = 1 1 + e − z \sigma(z)=\frac{1}{1+e^{-z}} σ(z)=1+e−z1​,值域在 ( 0 , 1 ) (0,1) (0,1)之间。但有时其他的激活函数效果会更好:

  • t a n h ( z ) = e z − e − z e z + e − z tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}} tanh(z)=ez+e−zez−e−z​,该函数的值域在 ( − 1 , 1 ) (-1,1) (−1,1)之间。该函数均值是更接近零(因为值域介于 ( − 1 , 1 ) (-1,1) (−1,1)),所以使用该函数总要优于 s i g m o i d sigmoid sigmoid

  • R e L u ( z ) = m a x ( 0 , z ) ReLu(z)=max(0,z) ReLu(z)=max(0,z)。上述两个函数当 z z z较大或较小时,梯度会接近于0进而导致梯度下降速度变得很慢,而 R e L u ReLu ReLu函数在 z z z为正值时导数恒为1,负值时恒为0(尽管在 z = 0 z=0 z=0时导数没有定义,但是实际 z = 0 z=0 z=0这样情况几乎不存在)

  • L e a k y R e L u ( z ) = m a x ( 0.01 z , z ) LeakyReLu(z)=max(0.01z,z) LeakyReLu(z)=max(0.01z,z)。该函数相较于 R e L u ReLu ReLu函数就是将 z < 0 z \lt 0 z<0时的直线进行了一定的倾斜,它通常比** R e L u ReLu ReLu**函数效果要好,但在实际中使用的不多(0.01并不是固定的,可以设置为学习参数)

综上所述:

  • 输出层一般还是使用 s i g m o i d sigmoid sigmoid,因为结果要介于 ( 0 , 1 ) (0,1) (0,1),其他层就不使用了
  • R e L u ReLu ReLu和 L e a k y R e L u LeakyReLu LeakyReLu因为 z > 0 z \gt 0 z>0时梯度为固定值1,不会造成梯度弥散,都可以加快梯度下降速度。但是 R e L u ReLu ReLu在负半区时梯度为0,意味着神经网络不训练(但是有足够的隐藏层使得 z z z值大于0的情况下,学习过程仍然可以很快)

3.2 为什么使用非线性激活函数?

假设激活函数使用线性函数 g ( z ) = z g(z)=z g(z)=z,此时 a [ 1 ] = z [ 1 ] = W [ 1 ] x + b [ 1 ] , a [ 2 ] = z [ 2 ] = W [ 2 ] a [ 1 ] + b [ 2 ] a^{[1]}=z^{[1]}=W^{[1]}x+b^{[1]},a^{[2]}=z^{[2]}=W^{[2]}a^{[1]}+b^{[2]} a[1]=z[1]=W[1]x+b[1],a[2]=z[2]=W[2]a[1]+b[2],将上面式子结合形成 a [ 2 ] = z [ 2 ] = W [ 2 ] W [ 1 ] x + W [ 2 ] b [ 1 ] + b [ 2 ] = W ′ x + b ′ a^{[2]}=z^{[2]}=W^{[2]}W^{[1]}x+W^{[2]}b^{[1]}+b^{[2]}=W'x+b' a[2]=z[2]=W[2]W[1]x+W[2]b[1]+b[2]=W′x+b′,神经网络只是把输入线性组合再输出,这些隐藏层就失去作用

所以在输出层在某些情况可以使用线性激活函数(比如 y y y输出房价),但是在隐藏层则不行(除非涉及到压缩)

3.3 激活函数的导数

  • s i g m o i d sigmoid sigmoid函数: g ′ ( z ) = g ( z ) ( 1 − g ( z ) ) g'(z)=g(z)(1-g(z)) g′(z)=g(z)(1−g(z)),其中 g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+e−z1​
  • t a n h tanh tanh函数: g ′ ( z ) = 1 − ( g ( z ) ) 2 g'(z)=1-(g(z))^2 g′(z)=1−(g(z))2,其中 g ( z ) = e z − e − z e z + e − z g(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}} g(z)=ez+e−zez−e−z​
  • R e L u ReLu ReLu函数:在 z = 0 z=0 z=0时通常指定导数为1或0

  • L e a k y R e L u LeakyReLu LeakyReLu函数:在 z = 0 z=0 z=0时通常指定导数为1或0.01

4.神经网络的反向传播

对于单层神经网络中单样本的反向传播过程如下所示:

下图为双层神经网络中多个样本和多样本经过反向传播后的梯度:

5.随机初始化

逻辑回归把权重初始化为0是可以的(具体原因可参考博文为什么逻辑回归训练时参数可以初始化为0?),但是对于神经网络把参数都初始化为0,则梯度下降将不起作用。如下图所示,如果将 W [ 1 ] W^{[1]} W[1]和 b [ 1 ] b^{[1]} b[1]都初始化为0,则 a 1 [ 1 ] = a 2 [ 1 ] a^{[1]}_1=a^{[1]}_2 a1[1]​=a2[1]​,意味着在反向传播时 d z 1 [ 1 ] = d z 2 [ 1 ] dz_1^{[1]}=dz_2^{[1]} dz1[1]​=dz2[1]​,无论迭代多少次都是如此(隐藏单元再多计算的结果都是一样就毫无意义了):

对于上面的神经网络,一般会进行以下初始化,其中常数 0.01 0.01 0.01是为了避免当激活函数为 t a n h tanh tanh或 s i g m o i d sigmoid sigmoid时, W W W很大会导致 Z Z Z很大,意味着梯度值很小,学习速度就变得很慢:

6.参考

https://www.bilibili.com/video/BV1FT4y1E74V?p=25-35

http://www.ai-start.com/dl2017/html/lesson1-week3.html

https://blog.csdn.net/qq_41398418/article/details/125106291

https://zhuanlan.zhihu.com/p/149183964

吴恩达深度学习课程-第三周相关推荐

  1. 吴恩达深度学习-Course4第三周作业 yolo.h5文件读取错误解决方法

    这个yolo.h5文件走了不少弯路呐,不过最后终于搞好了,现在把最详细的脱坑过程记录下来,希望小伙伴们少走些弯路. 最初的代码是从下面这个大佬博主的百度网盘下载的,但是h5文件无法读取.(22条消息) ...

  2. 吴恩达深度学习(一)-第三周:Planar data classification with one hidden layer

    Planar data classification with one hidden layer 本练习会建立只有一个隐藏层的神经网络,我们将看到这与逻辑回归有多大的差别. You will lear ...

  3. 360题带你走进深度学习!吴恩达深度学习课程测试题中英对照版发布

    吴恩达的深度学习课程(deepLearning.ai)是公认的入门深度学习的宝典,本站将课程的课后测试题进行了翻译,建议初学者学习.所有题目都翻译完毕,适合英文不好的同学学习. 主要翻译者:黄海广 内 ...

  4. github标星8331+:吴恩达深度学习课程资源(完整笔记、中英文字幕视频、python作业,提供百度云镜像!)...

    吴恩达老师的深度学习课程(deeplearning.ai),可以说是深度学习入门的最热门课程,我和志愿者编写了这门课的笔记,并在github开源,star数达到8331+,曾经有相关报道文章.为解决g ...

  5. 神经网络隐藏层个数怎么确定_含有一个隐藏层的神经网络对平面数据分类python实现(吴恩达深度学习课程1第3周作业)...

    含有一个隐藏层的神经网络对平面数据分类python实现(吴恩达深度学习课程1第3周作业): ''' 题目: 建立只有一个隐藏层的神经网络, 对于给定的一个类似于花朵的图案数据, 里面有红色(y=0)和 ...

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

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

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

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

  8. 吴恩达深度学习课程的漫画版来了!(漫画、视频、笔记都可以下载了!)

    吴恩达深度学习课程,个人认为是对初学者最友好的课程,非常系统.初学者如果希望快速入门,建议从这门课开始.由于是视频课,除了课程笔记之外,可以先看看课程漫画,更有助于理解. 尽管是英文版,但英文水平达到 ...

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

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

最新文章

  1. 测试start backup和ndb_restore
  2. java-并发-并发容器(3)
  3. java nep_Java 9 揭秘(1. 入门介绍)
  4. 数据库 三范式最简单最易记的解释
  5. 秒懂 QPS、TPS、PV、UV、IP!
  6. Java 7:Fork / Join框架示例
  7. addeventlistener事件第三个参数_JavaScript 事件与事件处理机制
  8. 文本标注工具——doccano
  9. iOS 15泄密,屏下指纹的iPhone 13真的要来了
  10. Web API路由与动作(三)
  11. Error mounting /dev/sdc1 at /media/XXXX: Command-line `mount -t “ntfs“ -o
  12. 《APUE》读书笔记—第四章文件和目录
  13. android-goldfish-3.4内核源码下载与编译
  14. 计算机设备管理器没有WDS,hp 1136 电脑重启后 自动脱机 ,打印机服务也开起来,要把驱动删除掉,重新安装驱动才可以...
  15. ln建立软链接出现错误:broken symbolic link to
  16. variance和variation的区别
  17. C# GDAL读、写shape中文乱码
  18. (转)给想立志入行网络或已经初入行的朋友的建议
  19. 如何查已经欠费的联通手机号码
  20. class torch.optim.lr_scheduler.StepLR

热门文章

  1. Spring事务管理器配置两种配置方法,使用方法
  2. 送给北京地区想跳槽的底层人民
  3. 价值3000万,腾讯拿下微信域名;美团辞退偷吃客户餐食的外卖员丨价值早报
  4. 无法连接pptp服务器未响应,pptp服务器未响应
  5. 【100%通过率】华为 OD 机试真题 C++ 实现【最大报酬】【2022.11 Q4 新题】
  6. python+appium+夜神模拟器刷快手极速版金币套现,帮你赚够早餐钱
  7. Cocos2D-X屏幕适配新解
  8. 震惊世界的中国秘方—里面的方子都是一个老中医几十年的心血!很强!!珍惜身体一定要看!!
  9. 强化学习——day11 马尔科夫决策过程MDP
  10. 如何确认和统计网站微信流量?