动手学深度学习v2笔记-Day4-多层感知机

动手学深度学习v2

Day 4


0x00 感知机

人工智能最早的模型之一

  • 模型定义
    给一个输入 X X X 权重 W W W 偏移量 b b b
    o = σ ( < W , X > + b ) o = \sigma( + b) o=σ(<W,X>+b)
    其中 σ \sigma σ函数的选择很多,举例一个二分类问题
    σ ( x ) = { 1 ( x > 0 ) − 1 ( x ≤ 0 ) \sigma(x) = \begin{cases} 1 &(x > 0)\\ -1 &(x \leq 0)\\ \end{cases} σ(x)={11(x>0)(x0)

  • 区别于之前两种

  1. 区别于线性回归 回归输出的是实数 感知机输出-1 1
  2. 区别于softmax 感知机是二分类 softmax可以多分类因为输出的是类别的概率
  • 收敛定理(完全不懂这里先照抄原文了)
    如果数据在半径 r r r内,余量 ρ \rho ρ分割为两类
    y ( X T W + b ) ≥ ρ y(X^TW + b) \geq \rho y(XTW+b)ρ
    那么对于
    ∣ ∣ W ∣ ∣ 2 + b 2 ≤ 1 ||W||^2 + b^2 \leq 1 ∣∣W2+b21
    感知机可以保证在 r 2 + 1 ρ 2 \frac {r^2 + 1} {\rho^2} ρ2r2+1步后收敛

  • XOR问题
    感知机不能拟合XOR函数,只能产生线性分割面
    XOR – 亦或问题
    输入相同输出0
    输入不同输出1

动手学深度学习v2笔记-Day4-多层感知机_第1张图片
可以思考得出无论怎样都不可能完整分割红绿两种分类

过于简单不能处理XOR问题,导致第一次AI寒冬

0x01 多层感知机

  • XOR问题的解决

动手学深度学习v2笔记-Day4-多层感知机_第2张图片
输入值分别进入两个分类器,得出结果最终进入灰色分类器得出最终答案

五个隐藏层的多层感知机如图

动手学深度学习v2笔记-Day4-多层感知机_第3张图片
隐藏层大小是超参数

  • 单类分类 - 单隐藏层
    1.输入 x x x n维列向量
    2.隐藏层一个 W 1 W_1 W1 m*n的矩阵 b 1 b_1 b1 m维列向量
    3.输出层 w 2 w_2 w2 m维列向量 b 2 b_2 b2
    和softmax回归相同, σ \sigma σ函数是激活函数
    h = σ ( W 1 x + b 1 ) h = \sigma(W_1x + b_1) h=σ(W1x+b1)
    输出
    o = w 2 T h + b 2 o = w_2^Th + b_2 o=w2Th+b2
  • 多类分类 - 单隐藏层
    和softmax没有本质区别,只是多加了一层隐藏层
    没有隐藏层就是softmax回归,加上隐藏层就是多层感知机

softmax操作 将所有的输出变换到(0,1)区间内且所有输出的和为1

y 1 , y 2 , y 3 , . . . , y k = s o f t m a x ( o 1 , o 2 , o 3 , . . . , o k ) y_1,y_2,y_3,...,y_k = softmax(o_1,o_2,o_3,...,o_k) y1,y2,y3,...,yk=softmax(o1,o2,o3,...,ok)
1.输入 x x x n维列向量
2.隐藏层一个 W 1 W_1 W1 mn的矩阵 b 1 b_1 b1 m维列向量
3.输出层 W 2 W_2 W2 m
k的矩阵 b 2 b_2 b2 k维列向量(k类输出罢了)
和softmax回归相同, σ \sigma σ函数是激活函数
h = σ ( W 1 x + b 1 ) h = \sigma(W_1x + b_1) h=σ(W1x+b1)
输出
o = W 2 T h + b 2 o = W_2^Th + b_2 o=W2Th+b2
最终softmax处理
y = s o f t m a x ( o ) y = softmax(o) y=softmax(o)

  • 多隐藏层
    就是多个h计算,上一层的输出作为下一层的输入
    也是超参数

0x02 激活函数

激活函数通过计算加权和并加上偏置来确定神经元是否应该被激活
激活函数一定要使用非线性函数
如果使用线性函数可以发现结果和一个单层的感知机是一样的,没有意义

  • sigmoid函数(考研数学张宇强调过
    将输入投影到(0,1)区间
    s i g m o i d ( x ) = 1 1 + e − x sigmoid(x) = \frac 1 {1 + e^{-x}} sigmoid(x)=1+ex1
    与0x00中的 σ \sigma σ函数相比,比较soft,因为不包含不可导区间
    函数图像如下
    动手学深度学习v2笔记-Day4-多层感知机_第4张图片

  • Tanh函数
    将输入投影到(-1,1)区间
    T a n h ( x ) = 1 − e − 2 x 1 + e − 2 x Tanh(x) = \frac {1-e^{-2x}} {1+e^{-2x}} Tanh(x)=1+e2x1e2x
    函数图像如下
    动手学深度学习v2笔记-Day4-多层感知机_第5张图片

  • ReLU函数(最常用的)
    max函数换名 计算很快
    R e L U ( x ) = m a x ( x , 0 ) ReLU(x) = max(x,0) ReLU(x)=max(x,0)
    动手学深度学习v2笔记-Day4-多层感知机_第6张图片

0x03 多层感知机的手动实现

import torch
from torch import nn
from d2l import torch as d2l

batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

num_inputs = 784
num_outputs = 10
num_hiddens = 256  # 隐藏层个数

# 隐藏层
W1 = nn.Parameter(torch.randn(num_inputs, num_hiddens, requires_grad=True))  # 784行 256列
b1 = nn.Parameter(torch.zeros(num_hiddens, requires_grad=True))  # 256
# 输出层
W2 = nn.Parameter(torch.randn(num_hiddens, num_outputs, requires_grad=True))  # 256 * 10
b2 = nn.Parameter(torch.zeros(num_outputs, requires_grad=True))  # 10

params = [W1, b1, W2, b2]


# ReLU函数
def relu(X):
    a = torch.zeros_like(X)
    return torch.max(X, a)


# 模型定义
def net(X):
    X = X.reshape((-1, num_inputs))
    H = relu(X @ W1 + b1)  # @表示矩阵乘法
    return H @ W2 + b2


loss = nn.CrossEntropyLoss()

num_epochs = 10
lr = 0.1

updater = torch.optim.SGD(params, lr=lr)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, updater)

0x04 多层感知机的pytorch实现

import torch
from torch import nn
from d2l import torch as d2l

# 多层感知机简洁实现,和softmax没有什么太大区别
net = nn.Sequential(nn.Flatten(), nn.Linear(784, 256), nn.ReLU(), nn.Linear(256, 10))


def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)


net.apply(init_weights)

batch_size, lr, num_epochs = 256, 0.1, 10
loss = nn.CrossEntropyLoss()
trainer = torch.optim.SGD(net.parameters(), lr=lr)

train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)

你可能感兴趣的:(动手学深度学习v2笔记,深度学习,机器学习,pytorch,神经网络,人工智能)