写在前面
这个笔记的定位是日常学习后的反思总结,主要是为了帮助我掌握学习到的知识。所以,内容会很零碎。不过,每学习一个完整模块,会有相应的总结。
立个Flag, 这个系列很可能坚持不到3月份。
内容摘要
今天重新翻开吴恩达的入门课程,神经网络和深度学习,继续之前关于双层神经的学习,整个第三周的课程,内容是基于 logistic模型,推广到有一个隐藏层的双层神经网络,这里面核心就是正向网络输出计算和为了更新参数而进行的反向传播。
所以,看懂这周课程的关键,就是掌握对应的矩阵运算,均是很直观的矩阵运算,每个神经元都包含两部分的计算,一类是线性运算,类似 y = k x + b y = kx + b y=kx+b, 其中,k 和 b 是要训练的参数, x 是输入的数据(可以称为特征), y是对应数据的线性组合;第二部分计算才是神经网络的精华,那便是非线性运算,如 sigmiod函数。
完成正向运算,便要算cost function, 这个是衡量网络性能的指标。
我们常说的训练神经网络,其实便是一个寻找合适参数的过程,如上面的 k, b (一般均是矩阵)。主要使用的技术被称为反向传播,本质就是求各参数对于 cost function的一阶偏导,决定参数更新方向。于是,这里要求我们记住方向传播的计算矩阵。吴恩达这个课程,用着最浅显的语言给我们解释,所以很适合觉得自己数学不好的人入门……
课程还介绍了4种非线性激活函数,一个神经网络的性能,受激活函数的影响,影响程度如何,希望以后的实践经验,能帮我回答这个问题。
课程还简单解释了非线性的必要性,因为没有引入非线性的话,不管神经网络多少层,最后的能力仅相当于一层,因为线性组合的叠加,依然是线性组合。Magic comes from nonlinear.
两层神经网络结果
正向传播公式
反向传播的公式
(看的时候,没有自己推导,很难跟上;这部分跟第二周的课程的反向传播联系紧密,看来要复习一遍)
4种非线性激活函数
- sigmoid函数, 值域 (0,1) (图片之后补上)
- tanh 函数, 值域(-1,1),使用优先级高于sigmoid,因为sigmoid函数,都是正的,有可能使后面神经元在激活函数工作在饱和区间
- ReLU, 值域(0, +inf), 优势是梯度一直为1,在反向传播更新参数的时候,能更快收敛
- leaky ReLU, 形式 max(0.01z, z), 特点,自变量为负的区间,不再是0,而是拥有0.01的斜率
选取原则
激活函数的选取,没有放之四海而皆准的方法,最终选哪一个,还是看具体实践的效果。优先推荐 ReLU, 因为反向更新参数是最快的。如果效果不好,尝试其他几个就行。