cs231n-lecture4

本文深入探讨了反向传播的基本原理及其在神经网络中的应用,包括计算图、链式法则、梯度计算等关键概念,并详细介绍了SVM和Softmax的梯度推导过程。此外,还讨论了两层神经网络的结构与训练方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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函数的公式及求响应的LW∂L∂W如下:

f(x,W)=WxL=1NLi(f(xi,W),yi)LW=LffW=dfxTf(x,W)=W∗xL=1N∑Li(f(xi,W),yi)∂L∂W=∂L∂f∂f∂W=dfxT

W[C×M]$$x[M×N]$$f[C×N]矩阵的维度:W[C×M]$、$x[M×N]$、$f[C×N]
- 那么只对于单纯的一个f值而言,那么满足如下公式

{W(1,:)x(:,1)=f(1,1)LW(1,:)=LffW=df(1,1)x(:,1)T{W(1,:)x(:,1)=f(1,1)∂L∂W(1,:)=∂L∂f∂f∂W=df(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,:),因此满足一下公式:

fW(1,1)=f(1,:)x(1,:)TfW=f(1,:)x(1,:)Tf(2,:)x(1,:)Tf(C,:)x(1,:)Tf(1,:)x(2,:)Tf(2,:)x(2,:)Tf(C,:)x(2,:)Tf(1,:)x(M,:)Tf(2,:)x(M,:)Tf(C,:)x(M,:)T=fxT∂f∂W(1,1)=f(1,:)x(1,:)T∂f∂W=[f(1,:)x(1,:)Tf(1,:)x(2,:)T⋯f(1,:)x(M,:)Tf(2,:)x(1,:)Tf(2,:)x(2,:)T⋯f(2,:)x(M,:)T⋮⋮⋱⋮f(C,:)x(1,:)Tf(C,:)x(2,:)T⋯f(C,:)x(M,:)T]=fxT

(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是我的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值