第二章总结了二分分类与逻辑回归,第三章关于浅层神经网络

神经网络的结构与逻辑回归类似,只是神经网络的层数比逻辑回归多了一层,多出的中间一层叫隐藏层,那么,神经网络的计算就相当于多进行一次逻辑回归的计算

正向传播过程分成两层,第一层是输入层到隐藏层,用上标[1]来表示:第二层是隐藏层到输出层,用上标[2]来表示

神经网络的正向传播过程为:

每一个神经元的计算过程如下:

关于隐藏层对应的权重W [1]   和常数项b [1]   ,W [1]  的维度是(4,3)。这里的4对应着隐藏层神经元个数,3对应着输入层x特征向量包含元素个数。常数项  b[1] 的维度是(4,1),这里的4同样对应着隐藏层神经元个数。关于输出层对应的权重W[2] 和常数项b [2] ,W [2]   的维度是(1,4),这里的1对应着输出层神经元个数,4对应着隐藏层神经元个数。常数项b [2]  的维度是(1,1),因为输出只有一个神经元。总结一下,第i层的权重W [i]  W[i] 维度的行等于i层神经元的个数,列等于i-1层神经元的个数;第i层常数项b [i] 维度的行等于i层神经元的个数,列始终为1

为了方便运算,我们将其向量化:

先用乘法表示,可以看为

不使用for循环,利用矩阵运算的思想,输入矩阵X的维度为(n x  ,m)。这样,我们可以把上面的for循环写成矩阵运算的形式

W[1]的维度为(i,nx)  i为隐藏层神经元的个数,b[1]的维度为(i,1), i为隐藏层神经元的个数,Z[1]的维度为(i,m) m为样本个数,A[1]的维度为(i,m),W[2]的维度为(n,i),n为输出层个数,b[2]的维度为(n,1),Z[2]的维度为(n,m),n为输出层个数 A[2]的维度为(n,m)

ps:输入层X也可用A[0]表示

Activation Function:

tanh 函数与sigmoid 函数区别: tanh函数几乎在各个方面都比sigmoid函数表现好,因为tanh函数的取值范围在[-1,+1]之间,隐藏层的输出被限定在[-1,+1]之间,可以看成是在0值附近分布,均值为0。这样从隐藏层到输出层,数据起到了归一化(均值为0)的效果.而对于输出层的激活函数,因为二分类问题的输出取值为{0,+1},所以一般会选择sigmoid作为激活函数。

sigmoid函数和tanh函数,有这样一个问题,就是当|z|很大的时候,激活函数的斜率(梯度)很小。因此,在这个区域内,梯度下降算法会运行得比较慢。在实际应用中,应尽量避免使z落在这个区域,使|z|尽可能限定在零值附近,从而提高梯度下降算法运算速度

为了弥补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)。

为什么用使用非线性函数:如果隐藏层和输出层都是用线性函数最后就可以化为一个 w'x+b的函数,这样就和简单的使用线性模型没有任何关系,过程如下:

隐藏层必须使用非线性激活函数

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

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

各个激活函数的导数:

 Gradient descent for neural networks:

神经网络中的梯度下降,关于反向传播的求导问题,与第二章的差不多,求导采用求导中的链式法则,一步步进行运算,即可求得结果

Random Initialization


关于w和b的初始化,如果将w全部初始化为0,就会得到  a1[1]=a2[1] 。经过推导得到dz [1] 1 =dz [1] 2  dz1[1]=dz2[1] ,以及dW [1] 1 =dW [1] 2  dW1[1]=dW2[1] 。因此,这样的结果是隐藏层两个神经元对应的权重行向量W [1] 1  W1[1] 和W [1] 2  W2[1] 每次迭代更新都会得到完全相同的结果, W1[1] 始终等于W [1] 2  W2[1] ,完全对称。这样隐藏层设置多个神经元就没有任何意义了。值得一提的是,参数b可以全部初始化为零,并不会影响神经网络训练效果。

python中初始化随机变量w可以用以下代码:

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 [1] 1  W1[1] 和W [1] 2  W2[1] 乘以0.01的目的是尽量使得权重W初始化比较小的值。之所以让W比较小,是因为如果使用sigmoid函数或者tanh函数作为激活函数的话,W比较小,得到的|z|也比较小(靠近零点),而零点区域的梯度比较大,这样能大大提高梯度下降算法的更新速度,尽快找到全局最优解。如果W较大,得到的|z|也比较大,附近曲线平缓,梯度较小,训练过程会慢很多。

当然,如果激活函数是ReLU或者Leaky ReLU函数,则不需要考虑这个问题。但是,如果输出层是sigmoid函数,则对应的权重W最好初始化到比较小的值。

 

转载于:https://www.cnblogs.com/Dar-/p/9356647.html

吴恩达深度学习笔记 3.1~3.11 浅层神经网络相关推荐

  1. 吴恩达深度学习笔记(四)

    吴恩达深度学习笔记(四) 卷积神经网络CNN-第二版 卷积神经网络 深度卷积网络:实例探究 目标检测 特殊应用:人脸识别和神经风格转换 卷积神经网络编程作业 卷积神经网络CNN-第二版 卷积神经网络 ...

  2. 799页!吴恩达深度学习笔记.PDF

    吴恩达深度学习课程,是公认的最优秀的深度学习课程之一,目前没有教材,只有视频,本文提供完整笔记下载,这本笔记非常适合和深度学习入门. 0.导语 黄海广博士和同学将吴恩达老师深度学习视频课程做了完整的笔 ...

  3. 吴恩达深度学习笔记——卷积神经网络(Convolutional Neural Networks)

    深度学习笔记导航 前言 传送门 卷积神经网络(Convolutional Neural Networks) 卷积神经网络基础(Foundations of Convolutional Neural N ...

  4. 吴恩达深度学习笔记——神经网络与深度学习(Neural Networks and Deep Learning)

    文章目录 前言 传送门 神经网络与深度学习(Neural Networks and Deep Learning) 绪论 梯度下降法与二分逻辑回归(Gradient Descend and Logist ...

  5. 吴恩达深度学习笔记——结构化机器学习项目(Structuring Machine Learning Projects)

    深度学习笔记导航 前言 传送门 结构化机器学习项目(Machine Learning Strategy) 机器学习策略概述 正交化(orthogonalization) 评价指标 数字评估指标的单一性 ...

  6. 吴恩达深度学习笔记1-Course1-Week1【深度学习概论】

    2018.5.7 吴恩达深度学习视频教程网址 网易云课堂:https://mooc.study.163.com/smartSpec/detail/1001319001.htm Coursera:htt ...

  7. 吴恩达深度学习笔记(四)—— 正则化

    有关正则化的详细内容: 吴恩达机器学习笔记(三) -- Regularization正则化 <机器学习实战>学习笔记第五章 -- Logistic回归 主要内容: 一.无正则化 二.L2正 ...

  8. 吴恩达深度学习笔记_Github标星过万的吴恩达机器学习、深度学习课程笔记,《统计学习方法》代码实现,可以在线阅读了!...

    吴恩达机器学习.深度学习,李航老师<统计学习方法>,可以说是机器学习入门的宝典.本文推荐一个网站"机器学习初学者",把以上资源的笔记.代码实现做成了网页版,可以在线阅读 ...

  9. 吴恩达--深度学习笔记

    这是一个督促自己学习的笔记 文章目录 这是一个督促自己学习的笔记 1.logistic回归 1. 神经网络基础----二分分类 2. logistic回归 3. logistic回归损失函数 4. 梯 ...

最新文章

  1. sklearn可视化不同数据划分方法的差异:KFold, ShuffleSplit,StratifiedKFold, GroupKFold, StratifiedShuffleSplit.......
  2. 二十七、连续分配管理方式
  3. 每日一皮:看图猜一个数据库连接池!
  4. optee中TA的堆的分配
  5. 在线预览视频/直播:m3u8、rmpt、mp4、flv
  6. 观“蓝野摇滚乐队”演唱会
  7. 面试官系统精讲Java源码及大厂真题 - 46 ServerSocket 源码及面试题
  8. rudesocket如何使用_c++ socket 客户端库 socks5 客户端 RudeSocket™ Open Source C++ Socket Library...
  9. TP-Link发布网格路由器Deco M5
  10. java/android 做题中整理的碎片小贴士(15)
  11. Databinding在自定义ViewGroup中如何绑定view
  12. win10必须禁用的服务_关闭这几个系统服务,让你的电脑不再卡!
  13. Linux-war包解压与压缩
  14. 计算机计算公式单组数据求乘法,excel怎么算乘法
  15. yocto 学习:1- 什么是yocto
  16. java字符串转list_java将String字符串转换为ListLong类型实例方法
  17. matlab数组保存envi,MATLAB 读取envi img格式
  18. 《绿光森林》惹争议 收视冠军也是挨骂冠军
  19. T6企业管理软件 7.1 - 导入期初应收应付提示“子表关联项过长”
  20. 微信公众号网页中页面的关闭事件

热门文章

  1. react antd 更改table 表头和表行样式
  2. TensorFlow实现条件批归一化(Conditional Batch Normalization)
  3. linux 更改ssh端口_如何在Linux中更改SSH端口-简易指南
  4. ios8升级ios12教程_iOS Hello World示例教程
  5. 路科验证示例_角度形式验证示例
  6. Python继承范例
  7. mvp+dagger2_Android MVP + Dagger2 +改造+ RxJava
  8. python函数局部变量_Python局部函数– functoolspartial()
  9. Java基础篇:简单数据类型
  10. 信息系统开发平台OpenExpressApp - 支持日志功能