李宏毅《机器学习》课程笔记(作业三:反向传播)

深度学习里面的梯度下降中,在计算梯度的时候有两个过程,分别是前向过程和反向过程,很容易理解。

然后在用sigmod作为激活函数的时候,会出现梯度衰减的问题,导致第一层还只做了一点点梯度下降的时候最后一层已经训练好了。为了解决这个问题,2006年最早的文章使用PRM来逐层训练,成功避免了这个问题。但是这样非常复杂。后来hilton提出了一个新的方法,使用ReLU,变成了线性的激活函数。虽然单个神经元是linear的,但是不同的值导致active的神经元不太一样,所以整个网络还是nonlinear的。

在考虑适应性的学习率的时候,除了上次学的adagrad,还可以用RMSProp,其实就是一个小的改动,给久远的梯度一个较小的权重。然后momentum讲的很好,图形很清楚。两者相结合就是Adam。

dropout很神奇,是在训练过程中随机一p概率丢掉一部分参数不做更新,最后testing的时候用上所有参数,但是所有参数乘上一个(1-p)。这本质上是一种终极的ensemble集成学习,相当于在同时训练很多的神经网络,最后把所有的神经网络同时用上然后取平均,这种方法可以证明在linear network上是跟各种网络分别做预测然后ensemble的一种近似。但是non-linear的网络上两者就不等价,然后依然很有效果,所以很神奇。值得注意的是,在例如ReLU这样的线性网络中,加入dropout确实是效果更好的,很有意思。

在比较deep和shallow的神经网络的性能的时候,要保证他们的参数一样多,也就是说一个细长,一个矮胖,这样才是公平的。

 

为什么用dnn,在dnn出现之前,语音识别里面是对每一个音素学习一个模型,但是现在所有的音素都share同一组模型,会更有效率,所以dnn并不是只是靠很多参数来暴力的。虽然两层神经网络就可以实现任意函数,但是多层的话可以更有效率。剪窗花的例子非常有意思,深度学习相当于把数据对折,然后在对折后的彩纸上去剪。这样一来,即使数据少,深度学习也是有次序的崩坏,而不是任意的崩坏。

深度学习能实现end-to-end端到端的learning,也就是说只需要管输入和输出,不需要管中间的每一个function负责做什么,所以很牛逼。

 

卷积神经网络CNN实际上相当于把全连接网络做了筛选和权重的共享,所以是相当于全连接网络的简化。max pooling相当于把模型进行sub sampling,就是采样一下,进一步简化模型。然后flatten就是拉直,变成一个vector就可以了。

 

虽然神经网络究竟为什么可以学习到我们不太清楚,我们还是可以直观地看出来每一个卷积层在是识别什么,方法就是,把学习好的模型参数先固定,然后用梯度下降找到最好的一个输入x使得某一个卷积层或者某一个神经元节点的输出最大,这样可以知道这个神经元最喜欢什么,也就是出现什么的时候它最被激活。非常巧妙。

 

什么时候适合使用CNN:1.有用的地方只出现在大矩阵中的一个小部分。2. 这个小部分出现在任意的位置都表示同样的意思。 3. subsampling抽样不会改变矩阵的特性。值得注意的是,由于围棋里面不符合第三个特性,所以alphago里面没有用max pooling。

现在有一个问题,为什么max函数可以微分

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值