四、Loss Function: Classification
1、把你的类别,用One-hot Vector表示
向量数组中,不同下标的每个元素,都表示一种不同的类别:
C
l
a
s
s
1
C
l
a
s
s
2
C
l
a
s
s
s
3
y
1
^
=
[
1
0
0
]
y
2
^
=
[
0
1
0
]
y
3
^
=
[
0
0
1
]
\qquad Class1 \quad\qquad Class2 \quad\qquad Classs3\\ \hat{y_1}={\begin{bmatrix} 1\\0\\0 \end{bmatrix}} \qquad \hat{y_2}={\begin{bmatrix} 0\\1\\0 \end{bmatrix}} \qquad \hat{y_3}={\begin{bmatrix} 0\\0\\1 \end{bmatrix}}
Class1Class2Classs3y1^=⎣⎡100⎦⎤y2^=⎣⎡010⎦⎤y3^=⎣⎡001⎦⎤
2、目标计算
分类目标函数计算框架:
s
o
f
t
m
a
x
[
b
′
+
W
′
σ
(
b
+
W
x
)
]
=
y
′
←
⋯
→
y
^
softmax[b^\prime+W^\prime\sigma(b+Wx)]=\pmb{y}^\prime\gets\cdots\to \hat{\pmb{y}}
softmax[b′+W′σ(b+Wx)]=yyy′←⋯→yyy^
其中,
y
\pmb{y}
yyy表示一组向量,Softmax函数如下:
y
i
′
=
e
x
p
(
y
i
)
∑
j
e
x
p
(
y
i
)
y^\prime_i=\frac{exp(y_i)}{\begin{matrix} \sum_jexp(y_i) \end{matrix}}
yi′=∑jexp(yi)exp(yi)
这是当目标类别大于两个的时候,当分类只有两个的时候,我们不使用softmax,而是直接套用sigmoid函数;
3、分类的损失
最小化交叉熵损失: e = − ∑ i y ^ i l n y i ′ e=-{\begin{matrix} \sum_i\hat{y}_ilny^\prime_i \end{matrix}} e=−∑iy^ilnyi′(极其常用,以及部分变形),注意,如果你在网络中使用了损失函数Cross-entropy,则在构建网络的时候不需要进行Softmax函数的添加,因为已经集成在其中了;
五、Quick Introduction of Batch Normalization
1、目标:
让训练数据的每个属性拥有一个相同的数据范围,好处是在梯度下降时每个参数更新的程度都近似统一:
D a t a 1 : [ 1 , 2 , 3 , 4 , . . . , 100 ] 、 D a t a 2 : [ 100 , 200 , 300 , 400 , . . . 1000 ] → [ 0.01 ∼ 1 ] Data1:[1,2,3,4,...,100]、Data2:[100,200,300,400,...1000]\to[0.01\sim1] Data1:[1,2,3,4,...,100]、Data2:[100,200,300,400,...1000]→[0.01∼1]
2、Feature Normalization
假如我们的数据集中有如下向量数据(上标表示某一个,下标表示某一个特征属性):
x
1
x
2
x
3
x
n
[
x
1
1
x
2
1
x
3
1
⋮
x
m
1
]
[
x
1
2
x
2
2
x
3
2
⋮
x
m
2
]
[
x
1
3
x
2
3
x
3
3
⋮
x
m
3
]
…
[
x
1
n
x
2
n
x
3
n
⋮
x
m
n
]
\pmb{x^1}\quad\qquad\pmb{x^2}\quad\qquad\pmb{x^3}\qquad\qquad\quad\pmb{x^n} \\ \begin{bmatrix} x^1_1\\x^1_2\\x^1_3\\\vdots\\x^1_m\end{bmatrix}\quad \begin{bmatrix} x^2_1\\x^2_2\\x^2_3\\\vdots\\x^2_m\end{bmatrix}\quad \begin{bmatrix} x^3_1\\x^3_2\\x^3_3\\\vdots\\x^3_m\end{bmatrix}\quad \dots\quad \begin{bmatrix} x^n_1\\x^n_2\\x^n_3\\\vdots\\x^n_m\end{bmatrix}
x1x1x1x2x2x2x3x3x3xnxnxn⎣⎢⎢⎢⎢⎢⎡x11x21x31⋮xm1⎦⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎡x12x22x32⋮xm2⎦⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎡x13x23x33⋮xm3⎦⎥⎥⎥⎥⎥⎤…⎣⎢⎢⎢⎢⎢⎡x1nx2nx3n⋮xmn⎦⎥⎥⎥⎥⎥⎤
(1)Trianing:
x
~
i
j
=
x
i
j
−
m
i
σ
i
\tilde{x}^j_i=\frac{x^j_i-m_i}{\sigma_i}
x~ij=σixij−mi,其中,
m
i
m_i
mi是第i个维度下的Batch里所有数据的平均值,
σ
i
\sigma_i
σi是标准差,可以在每一层的输出或者激活函数之后的输出后加批归一化。
此外,有时会在批处理化之后接乘一些向量以免数据分布反而太过集中: x ~ i j = γ ⨀ x ~ j + β \tilde{x}^j_i=\gamma\bigodot\tilde{x}^j+\beta x~ij=γ⨀x~j+β(很少用,基本没在代码里见过,可能也是集成在了某些函数里我不知道吧…)
(2)Testing:应为我们在测试的时候有时候可能会没有一个Batch大小的数据供我们使用,在pytroch中,其解决方法是这样的,因为我们在训练的时候会计算出很多的均值
μ
1
,
μ
2
.
.
.
μ
t
\mu^1,\mu^2...\mu^t
μ1,μ2...μt以及方差
σ
1
,
σ
2
,
.
.
.
σ
t
\sigma^1,\sigma^2,...\sigma^t
σ1,σ2,...σt,所以在每次得到一个新的均值与方差的时候,pytorch会计算一个总体样式的均值,计算方法如下:
μ
ˉ
←
p
μ
ˉ
+
(
1
−
p
)
μ
t
σ
ˉ
←
p
σ
ˉ
+
(
1
−
p
)
σ
t
\bar{\mu}\gets p\bar{\mu}+(1-p)\mu^t \qquad \bar{\sigma}\gets p\bar{\sigma}+(1-p)\sigma^t
μˉ←pμˉ+(1−p)μtσˉ←pσˉ+(1−p)σt
其中,
μ
t
、
σ
t
\mu^t、\sigma^t
μt、σt都是表示最新的那个值,p为一个参数,默认设置为0.1,最后在训练完的时候会将
μ
ˉ
、
σ
ˉ
\bar{\mu}、\bar{\sigma}
μˉ、σˉ带入到测试中去;
(3)如果想要将批处理话用在卷积神经网络(CNN)上,请参考Sergey loffe与Christian Szegedy的论文[1];
3、其他的Normalization的方法(截止到2021/6/12日前的引用数量)
(1)Batch Renormalization[2],引用:300+;
(2)Layer Renormalization[3],引用:3000+;
(3)Instance Renormalization[4],引用:1500+;
(4)Group Renormalization[5],引用:1200+;
(5)Weight Renormalization[6],引用:1100+;
(6)Spectrum Renormalization[7],引用:100+;
[1] Ioffe S, Szegedy C. Batch normalization: Accelerating deep network training by reducing internal covariate shift[C]// Proceedings of the International conference on machine learning. PMLR, 2015: 448-456.
[2] Ioffe S. Batch renormalization: Towards reducing minibatch dependence in batch-normalized models[J]. arXiv preprint arXiv:1702.03275, 2017.
[3] Ba J L, Kiros J R, Hinton G E. Layer normalization[J]. arXiv preprint arXiv:1607.06450, 2016.
[4] Ulyanov D, Vedaldi A, Lempitsky V. Instance normalization: The missing ingredient for fast stylization[J]. arXiv preprint arXiv:1607.08022, 2016.
[5] Wu Y, He K. Group normalization[C]//Proceedings of the European conference on computer vision . 2018: 3-19.
[6] Salimans T, Kingma D P. Weight normalization: A simple reparameterization to accelerate training of deep neural networks[J]. arXiv preprint arXiv:1602.07868, 2016.
[7] Yoshida Y, Miyato T. Spectral norm regularization for improving the generalizability of deep learning[J]. arXiv preprint arXiv:1705.10941, 2017.