【CS231n 学习笔记】Lecture4:Backpropagation and Neural Networks

CS231n学习笔记目录(2016年Andrej Karpathy主讲课程)


Backpropagation

首先有3个向量x、y、z,定义一个函数f,使用计算图框架表示为:

 则最终f的结果为-12,现在引入一个中间变量q,则表达式就变成了一个x和y的加法以及q和z的乘法:

首先考虑f对f的导数,值为1;f对z求偏导为q,值为3,意味着变量z对最终的结果有积极的影响,如果给z增加h,则结果f增加2h;f对q的偏导为z,值为-4,对结果有消极的影响;f对x的偏导数需要通过链式法则,转换为f对q的偏导数乘以q对x的偏导数,值为z*1=-4;f对y的偏导数转换为f对q的偏导数乘以q对y的偏导数,值为-4。

正向推导是指输入x、y、z计算f的过程,反向传播是指根据链式法则对局部梯度相乘,将目标梯度展开成各中间变量链式的局部梯度。

Neural Network

之前使用的线性函数格式为f=Wx,2层的神经网络格式为f=W2max(0,W1x),这里首先使用W1x线性函数,然后通过max()函数激活,然后与W2相乘,就得到了一个2层的神经网络。因此一个神经网络包括输入层输出层,在两者之间还加入了隐藏层,可以根据需求改变隐藏层的大小(比如设置成100)。

在之前的例子中,car类的线性分类器需要处理不同朝向的汽车,且不能处理不同颜色的汽车,因此分类器效果并不好,但我们可以给神经网络赋予不同的数值,比如让第一个数值处理朝向正前方的汽车,下一个用来处理朝向向左的汽车等等,而且得到的数值只有在图片满足这些详细要求的时候才会为正,否则为0,这样就得到了一个针对所有不同情况下汽车的模板,隐藏层会对不同情况下的汽车进行筛选,W2会对不同情况下的汽车模板进行汇总。

Activation Functions

在神经网络中会用到一些激活函数。在机器学习历史上,人们一开始使用的是tanh函数,到了2021年,ReLU函数开始流行,因为这个函数能够让神经网络计算快很多,也是推荐使用的一种函数。现在也有很多新的激活函数被提出,如Maxout、ELU等,可以使用不同的激活函数来优化神经网络。

Architectures

神经网络的结构如下,左边是一个2层的神经网络(单隐藏层神经网络),右边是一个3层神经网络(双隐藏层神经网络),不包括输入层,因为输入层的神经元只有输入值,没有计算权值的过程。另外,这里每个神经元都连接下一层的所有神经元,因此称这些层为全连接层。

 下面展示了一个二分类任务的两层神经网络的训练过程,二维空间中共有两种颜色的点,当隐藏层中的神经元数越来越多时,图上的边界就越扭曲,神经网络能计算的函数也越复杂。

 接下来往神经网络中加入正则化,表现的是对高维度W的惩罚力度,当正则化系数越大时,这个系数使得W变得非常小(因为loss要变小),最终的函数就会变得非常平滑,当降低正则化系数后,边界扭曲程度就会变高,拟合程度更高,起作用的变量数量就会更多。

Problems

  • 神经网络的神经元数量是越多越好吗?在机器学习中经常会出现模型表达能力不足的问题,加入更多的神经元会让神经网络表达性能更好,但同时也需要正则化防止过拟合。要注意防止神经网络过拟合的方法不是减少神经元,而是加入合适的正则化系数。所以人们总会希望使用更大的神经网络来进行计算,但由于时间等条件的限制,实际中会使用小一点的神经网络。
  • 神经网络中是越宽越好还是越深越好?并没有一个标准答案,一般来说,如果是图片处理问题的话,层数会更重要一些,但如果处理的是一个简单的数据,就没有必要使用很深的网络。
  • 不同层可以使用不同的激活函数吗?大部分情况下我们都选择在整个网络中使用一种激活函数,实际操作中通常使用ReLU函数。在不同层使用不同激活函数并没有什么好处,我们一般不会这么做。

(纯学习分享,如有侵权,联系删文)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Panpanpan!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值