231n--神经网络和反向传播

神经网络

神经网络,不再是单纯的单层线性计算,而加入了非线性层
也被称为全连接网络或者有时候被称为多层感知机

20221028193809

20221028193830

激活函数

函数 max(0,z)被称为激活函数

20221028194558
如果没有激活函数,多层的线性计算都可以化为一层的线性计算。又变成了一个线性分类。

为什么需要非线性

因为在现行条件下,很多是线性不可分的,因此需要进行一定的特征转换才能可分。
20221028194819

几种常见的激活函数

20221028194922

20221028200031

20221028200233

import numpy as np
from numpy.random import random

N, D_in, H, D_out = 64,1000, 100, 10
x, y = randn(N,D_in), rand(N,D_out)
w1, w2 = randn(D_in, H), randn(H, D_out)

for t in range(2000):
    # 两层神经网络
    h = 1 / (1 + np.exp(-x.dot(w1)))
    y_pred = h.dot(w2)
    loss = np.square(y_pred - y).sum()
    print(t, loss)

    grad_y_pred = 2.0 * (y_pred - y)
    grad_w2 = h.T.dot(grad_y_pred)
    grad_h = grad_y_pred.dot(w2.T)
    grad_w1 = x.T.dot(grad_h*h*(1 - h))

    w1 -= 1e-4 * gred_w1
    w2 -= 1e-4 * gred_w2


20221028204004

20221028204047

神经网络的loss

20221028204424

这么复杂的方程,我们如何计算梯度? 如果用在纸上推到的方式,我们需要进行很大的计算量。如果使用softmax替换SVM呢?岂不是要重新推导?

更好的方法,使用计算图和反向传播

20221028204707

神经网络会做的非常大,使用人去推到梯度计算的公式显然是不太现实的

20221028204808

反向传播

20221028204900

20221028210950

20221028211034

将计算图中的部分拿出来,我们可以将其看作不同的类型的gate

20221028213902

注意max gate,对于较小的值,导数可以为0,对于较大的值,local gradient 为 1

20221028214024

向量形式的反向传播公式

向量求导

20221030214725

20221030215716

向量的梯度和变量本身有相同的维度。

如果是矩阵形式,在计算local gradients的时候会计算一个非常大的 Jacobian 矩阵
20221030220422

可以推一波
20221030221054

20221030221307

我们可以直接使用矩阵梯度求导的公式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值