神经网络(Neural Network, NN)的拓扑结构
分类如下:
有向非循环图:多层感知机MLP,卷积神经网络CNN
有向循环图:玻尔兹曼机BM,循环神经网络RNN
卷积网络用于处理网格化数据;循环神经网络用于处理序列化数据。
多层感知机(Multi-Layer Perceptron, MLP)
由多层全连接层相连而成,详见CNN不分。
https://www.huaweicloud.com/articles/500af3257273662fa204bcc1f72d054d.html
The theoretical analysis has shown that the MLP constructed with over one hidden layer can approximate any continuous computable function to an arbitrary precision.
循环神经网络(RNN, Recurrent NN)
输入n x d维数据,n为样本数,d是数据的维度。
隐藏层状态为n x h维。
输出为n x q维,一对一,一对多,多对多,多对一。
- Long Short Term Memory 长短期记忆网络
LSTM是RNN的一种形式。
时序输入,前一时间的信息对后一时间的信息有提示或限制;LSTM通过训练记忆时序之间的概率关系。
torch.nn.LSTM(input_size, hidden_size, num_layers)
卷积神经网络(CNN, Convolutional NN)
全连接层、卷积层、池化层、常见的Normalization层
全连接层:对矩阵整体实现线性变换和非线性变换。符号为ip
卷积层:对矩阵局部实现乘加和和非线性变换。符号为conv
池化层:对局部特征进行融合。符号为pool
全连接层
线性变换
y
=
A
x
+
b
y = Ax + b
y=Ax+b
非线性变换,如sigmoid函数
y
=
1
1
+
e
−
x
y = \frac{1}{1 + e^ {-x}}
y=1+e−x1
全连接层的反向传播
以两层全连接层为例,
def backward(self, loss):
residual_z = loss * self.top_val * (1 - self.top_val)
# loss对w的偏导数
grad_w = np.dot(self.bottom_val, residual_z.T)
grad_b = np.sum(residual_z)
self.w -= self.lr * grad_w
self.b -= self.lr * grad_b
residual_x = np.dot(self.w, residual_z)
return residual_x
# loss为最后一层y-t
layer1loss = fc2.backward(loss)
saliency = fc1.backward(layer1loss)
卷积层
-
线性变换:与图像的边缘检测处理类似,如求梯度。
-
非线性变换 Rectify Linear Unit,ReLU
y = x , x > 0 y = 0 , 其他 y = x, x \gt 0 \\ y = 0, 其他 y=x,x>0y=0,其他 -
卷积变换的输入输出大小
X o u t = 1 + X i n t + 2 ∗ p a d d i n g − S k e r n a l S s t r i d e X_{out}=1+\frac{X_{int}+2*padding-S_{kernal}}{S_{stride}} Xout=1+SstrideXint+2∗padding−Skernal
卷积向下取整,池化向上取整。
工程问题,输入3通道,卷积输出128通道,如何实现?或者从N通道,到1通道,如何实现?
输入3通道,输出128通道,需要3 x 128个卷积核,每次取出1层128个卷积核与一个通道的输入,得到128通道输出,共3次,将结果合并得输出;输入N通道,输出1通道,需要Nx1个卷积核,同样处理。
卷积层的反向传播
对三种数的偏导:输入X、权重W、偏置B
re_x = conv(padding(loss, kernel.size() - 1), rot180(kernel))
re_w = conv(x, loss)
epoch 所有样本数据正向和反向传递1轮为1epoch。
池化层
maxPooling,是指从矩阵块如3x3矩阵中取最大值。
avgPooling、L2Pooling,顾名思义。
GDN(Generalized Divisive Normalization)
y
[
i
]
=
x
[
i
]
β
[
i
]
+
∑
j
(
γ
[
j
,
i
]
∗
x
[
j
]
2
)
y[i] = \frac{x[i]}{\sqrt{\beta[i] + \sum_j(\gamma[j, i] * x[j]^2)}}
y[i]=β[i]+∑j(γ[j,i]∗x[j]2)x[i]
参考:Density Modeling of Images Using a Generalized Normalization Transformation https://arxiv.org/abs/1511.06281