cs231n-lecture4

CS231N–反向传播与神经网络

一、反向传播

1.计算图实例

(1) SVM;
(2) AlexNet卷积神经网络;
(3) 神经网络图灵机
这里写图片描述

2.反向传播–链式求导法则(核心)

(1)实例1:一个简单的计算

这里写图片描述

(2)实例2:一个相对复杂的计算

这里写图片描述

如果知道sigmoid函数的求导公式,那么可以极大地简化该过程

这里写图片描述

(3)神经网络中的反向传播在分支处通过一级级的链式法则求导,使用当前已有的前后值替代。

(4)反向传播在每一个分支点的操作:加法,分发下去;Max,路由选择,选中的相同,未选中的0;乘法,梯度转换。
这里写图片描述

(5)计算图向后分支的反向传播为相加

这里写图片描述

(6)向量的梯度计算–雅克比矩阵逆推
- 以max函数为例
这里写图片描述

- 实际上max函数的矩阵是一个单位矩阵上,在对角线上max取值正确的为1,错误的为0,反向求导赋予就很方便;因此不需要求雅克比矩阵的所有维度,实际上1个mini-batch的大小为100,矩阵可能为409600\*409600,这样一个维度较大,超出内存。实际上并不需要去求一个矩阵,见下面这个例子。

- 以二次平方项为例
这里写图片描述

- 如上图可见,实际上在反向传播过程,大部分使用的前向函数参数的转置就ok。
  • 公式法+一步步逆推讲解矩阵乘法运算
    • 实际上对于一个包含scores和loss函数的公式及求响应的 L W 如下:

f ( x , W ) = W x L = 1 N L i ( f ( x i , W ) , y i ) L W = L f f W = d f x T

W [ C × M ] $ $ x [ M × N ] $ $ f [ C × N ]

- 那么只对于单纯的一个f值而言,那么满足如下公式

{ W ( 1 , : ) x ( : , 1 ) = f ( 1 , 1 ) L W ( 1 , : ) = L f f W = d f ( 1 , 1 ) x ( : , 1 ) T

- 那么只对W(1,1)求导而言,f的所有1行都包含对W(1,1)与x一行的乘积,而f中的每个值都是W的一行和x的一列的乘积,无法单纯的表示w(1,1),但是如果求df/dw(1,1),由于线性其他项消失,只剩下x(1,:),因此满足一下公式:

f W ( 1 , 1 ) = f ( 1 , : ) x ( 1 , : ) T f W = [ f ( 1 , : ) x ( 1 , : ) T f ( 1 , : ) x ( 2 , : ) T f ( 1 , : ) x ( M , : ) T f ( 2 , : ) x ( 1 , : ) T f ( 2 , : ) x ( 2 , : ) T f ( 2 , : ) x ( M , : ) T f ( C , : ) x ( 1 , : ) T f ( C , : ) x ( 2 , : ) T f ( C , : ) x ( M , : ) T ] = f x T

(8) SVM梯度函数推导过程:

(9) Softmax梯度函数推导过程:

(10)系统结构与框架平台介绍

##SVM梯度矩阵表示
margin[margin>0] = 1 # 大于0返回真值
counter_r = np.sum(margin, axis=1)
margin[list(range(num_train)),y] = -counter_r
dW += np.dot(X.T,margin)/num_train +reg*W

二、2层神经网络

1. 2层神经网络

这里写图片描述
- 传统的1层神经网络能够对前面的图片进行h层的特征处理,第2层可以对经过h层的特征处理

  • 一个2层神经网络的训练代码可能仅仅需要20行,具体的代码训练在assignment1中

  • 一个神经网络与实际神经网络的关系,树突相当于每层的汇聚,轴突相当于激活后的传输:
    这里写图片描述

  • 对于每一个神经元会使用激活函数,将线性的结果转换为[0,1]之间,有利于压缩结果的空间,因为实际上神经元识别是有上限的。常用的激活函数有:Sigmoid、Tanh、ReLU、LeakyReLU、Maxout、ELU,各有优缺点
    这里写图片描述

  • 常见的2、3层神经网络结构如下:
    这里写图片描述

2、总结

  • 神经网络不是真的神经元,是一种仿真的结果,或者说是给神经网络的结构一个合理的解释

  • 神经网络越大越好,层数越多越好,这个不完全成立,要看实际的情况。太大太深的网络容易过拟合(需要正则化),训练时间过长(无法解决);当使用简单的数据时,深度起到的作用较少,每特征提取有限

  • 用好已有的框架结构,将会极大地减小工作量,TensorFlow是我的选择。

猜你喜欢

转载自blog.csdn.net/sun1398/article/details/80861595