吴恩达深度学习课程-第三周
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
吴恩达深度学习课程-第三周相关推荐
- 吴恩达深度学习-Course4第三周作业 yolo.h5文件读取错误解决方法
这个yolo.h5文件走了不少弯路呐,不过最后终于搞好了,现在把最详细的脱坑过程记录下来,希望小伙伴们少走些弯路. 最初的代码是从下面这个大佬博主的百度网盘下载的,但是h5文件无法读取.(22条消息) ...
- 吴恩达深度学习(一)-第三周:Planar data classification with one hidden layer
Planar data classification with one hidden layer 本练习会建立只有一个隐藏层的神经网络,我们将看到这与逻辑回归有多大的差别. You will lear ...
- 360题带你走进深度学习!吴恩达深度学习课程测试题中英对照版发布
吴恩达的深度学习课程(deepLearning.ai)是公认的入门深度学习的宝典,本站将课程的课后测试题进行了翻译,建议初学者学习.所有题目都翻译完毕,适合英文不好的同学学习. 主要翻译者:黄海广 内 ...
- github标星8331+:吴恩达深度学习课程资源(完整笔记、中英文字幕视频、python作业,提供百度云镜像!)...
吴恩达老师的深度学习课程(deeplearning.ai),可以说是深度学习入门的最热门课程,我和志愿者编写了这门课的笔记,并在github开源,star数达到8331+,曾经有相关报道文章.为解决g ...
- 神经网络隐藏层个数怎么确定_含有一个隐藏层的神经网络对平面数据分类python实现(吴恩达深度学习课程1第3周作业)...
含有一个隐藏层的神经网络对平面数据分类python实现(吴恩达深度学习课程1第3周作业): ''' 题目: 建立只有一个隐藏层的神经网络, 对于给定的一个类似于花朵的图案数据, 里面有红色(y=0)和 ...
- 吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究
吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究 吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究 2.1 为什么要进行实例探究 2.2 经典网络 LeNet-5 AlexNet VGG- ...
- 吴恩达深度学习课程笔记之卷积神经网络(2nd week)
0 参考资料 [1] 大大鹏/Bilibili资料 - Gitee.com [2] [中英字幕]吴恩达深度学习课程第四课 - 卷积神经网络_哔哩哔哩_bilibili [3] 深度学习笔记-目录 ...
- 吴恩达深度学习课程的漫画版来了!(漫画、视频、笔记都可以下载了!)
吴恩达深度学习课程,个人认为是对初学者最友好的课程,非常系统.初学者如果希望快速入门,建议从这门课开始.由于是视频课,除了课程笔记之外,可以先看看课程漫画,更有助于理解. 尽管是英文版,但英文水平达到 ...
- 吴恩达深度学习课程笔记(初步认识神经网络)
吴恩达深度学习课程笔记1 课程主要内容 1.神经网络与深度学习介绍 2.Improving Deep Neural Networks:超参数调整,正则化,优化方法 3.结构化机器学习工程:比如如何分割 ...
最新文章
- 测试start backup和ndb_restore
- java-并发-并发容器(3)
- java nep_Java 9 揭秘(1. 入门介绍)
- 数据库 三范式最简单最易记的解释
- 秒懂 QPS、TPS、PV、UV、IP!
- Java 7:Fork / Join框架示例
- addeventlistener事件第三个参数_JavaScript 事件与事件处理机制
- 文本标注工具——doccano
- iOS 15泄密,屏下指纹的iPhone 13真的要来了
- Web API路由与动作(三)
- Error mounting /dev/sdc1 at /media/XXXX: Command-line `mount -t “ntfs“ -o
- 《APUE》读书笔记—第四章文件和目录
- android-goldfish-3.4内核源码下载与编译
- 计算机设备管理器没有WDS,hp 1136 电脑重启后 自动脱机 ,打印机服务也开起来,要把驱动删除掉,重新安装驱动才可以...
- ln建立软链接出现错误:broken symbolic link to
- variance和variation的区别
- C# GDAL读、写shape中文乱码
- (转)给想立志入行网络或已经初入行的朋友的建议
- 如何查已经欠费的联通手机号码
- class torch.optim.lr_scheduler.StepLR
热门文章
- Spring事务管理器配置两种配置方法,使用方法
- 送给北京地区想跳槽的底层人民
- 价值3000万,腾讯拿下微信域名;美团辞退偷吃客户餐食的外卖员丨价值早报
- 无法连接pptp服务器未响应,pptp服务器未响应
- 【100%通过率】华为 OD 机试真题 C++ 实现【最大报酬】【2022.11 Q4 新题】
- python+appium+夜神模拟器刷快手极速版金币套现,帮你赚够早餐钱
- Cocos2D-X屏幕适配新解
- 震惊世界的中国秘方—里面的方子都是一个老中医几十年的心血!很强!!珍惜身体一定要看!!
- 强化学习——day11 马尔科夫决策过程MDP
- 如何确认和统计网站微信流量?