层(Layer)
层的概念其实在很早的逻辑回归我们就以接触。逻辑回归中我们将数据先经过线性组合得新的空间,再通过sigmoid函数将这个空间映射到概率空间。如果我们将其分成两部分,则可以认为其本质上是一层线性层后跟上一个sigmoid层。
而现代深度神经网络通过将不同组件模块化实现类似的功能。 例如对于一组数据,其每个元素为 MxN 的矩阵,而我们期望将其输入到 MLP,并期望神经网络能将其分类为3类。
我们可以将其先拍平成一个 维的向量并将其输入进 MLP。而这个拍平操作也被表示为一个层,通常为 nn.Flatten
。
而MLP则可以将其看作一个函数,其输入为 ,其输出为 3 个标量表示不同分类的权重。
最后将结果放入一个 Softmax 层,得到不同分类的概率。
graph LR D[数据] --MxN的矩阵--> F[Flatten] F --MN维的向量--> MLP[MLP] MLP --3个标签权重--> SM[Softmax] SM --> O1[label1 的概率] SM --> O2[label2 的概率] SM --> O3[label3 的概率]
使用 Torch 代码表示则为
import torch.nn as nn
M = 28
N = 28
model = nn.Sequential(
# Flatten matrix to vector
nn.Flatten(),
# MLP
nn.Linear(M * N, 128),
nn.ReLU(),
nn.Linear(128, 32),
nn.ReLU(),
nn.Linear(32, 3),
# Softmax
nn.Softmax(dim=1)
)