BatchNormalization (BN) 主要用来解决深度神经网络训练过程中的内部协变量偏移问题,通过对每一层输入进行归一化处理,使得各层的学习更加独立高效。BN还有助于缓解梯度消失问题,可以使用更高的学习率,加速模型收敛。
在深度神经网络中,梯度消失是指在反向传播过程中,梯度随着层数增加而逐渐变小,导致网络深层部分权重更新非常缓慢,从而使得训练效率低下。通常由于使用了如Sigmoid或Tanh这类导数值容易饱和的激活函数引起。
循环神经网络(RNNs)具有以下主要优点,使其在处理序列数据方面表现出色:
Group convolution是卷积神经网络中一种特殊的卷积方式,它将输入的特征图分成若干组,每组独立进行卷积操作。这种方法可以减少参数数量,降低计算复杂度,同时增强网络的表达能力。
RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络,它通过将前一时间步的隐藏状态传递到当前时间步,从而能够维持一定的记忆性。
权重共享主要用于卷积神经网络中,同一卷积核在整个输入特征图上滑动计算,这样可以显著减少模型的参数数量,降低过拟合风险,同时提高计算效率。
激活函数在神经网络中用于添加非线性决策边界,使得网络可以学习更复杂的模式。常见的激活函数包括ReLU、Sigmoid、Tanh等。
在深度学习中,通常会finetuning已有的成熟模型,再基于新数据,修改最后几层神经网络权值,为什么?
Finetuning允许模型在一个已经预训练好的基础上,针对新的特定任务进行调整。这样可以利用预训练模型在大量数据上学到的通用特征,只需少量数据就能达到较好的性能。
Dropout是一种正则化技术,通过在训练过程中随机“丢弃”一部分神经网络的节点,来防止模型过拟合。
(Dropout 是一种技巧,用于帮助神经网络避免过于依赖训练数据中的特定模式,从而防止过拟合。想象一下,你在组装一个团队来解决问题,但为了确保团队不过分依赖某个关键成员,你决定在每次讨论时随机让一些成员休息。这样,整个团队就会学习如何在不完全的情况下也能找到解决方案,使得团队整体更加灵活和强大。
在神经网络中,Dropout 的做法类似于这种随机让一些“团队成员”(神经元)休息的策略。在模型训练的每一步中,每个神经元都有一定的概率被“关闭”,不参与这一次的学习过程。这样一来,网络就不能依赖于任何单个神经元,而是必须寻找更多的可能性来得出正确的输出。
训练完成后,在实际使用模型时,所有的神经元都会被启用,但它们的输出会根据之前的丢弃概率进行调整,以确保模型表现的一致性。这种方法简单而有效,广泛用于提高各种神经网络的性能和稳定性。)
Input Gate:
i
t
=
σ
(
W
i
i
x
t
+
b
i
i
+
W
h
i
h
t
−
1
+
b
h
i
)
i_t = \sigma(W_{ii} x_t + b_{ii} + W_{hi} h_{t-1} + b_{hi})
it=σ(Wiixt+bii+Whiht−1+bhi)
Forget Gate:
f
t
=
σ
(
W
i
f
x
t
+
b
i
f
+
W
h
f
h
t
−
1
+
b
h
f
)
f_t = \sigma(W_{if} x_t + b_{if} + W_{hf} h_{t-1} + b_{hf})
ft=σ(Wifxt+bif+Whfht−1+bhf)
Candidate Cell State:
C
~
t
=
tanh
(
W
i
c
x
t
+
b
i
c
+
W
h
c
h
t
−
1
+
b
h
c
)
\tilde{C}_t = \tanh(W_{ic} x_t + b_{ic} + W_{hc} h_{t-1} + b_{hc})
C~t=tanh(Wicxt+bic+Whcht−1+bhc)
Cell State Update:
C
t
=
f
t
⊙
C
t
−
1
+
i
t
⊙
C
~
t
C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t
Ct=ft⊙Ct−1+it⊙C~t
Output Gate:
o
t
=
σ
(
W
i
o
x
t
+
b
i
o
+
W
h
o
h
t
−
1
+
b
h
o
)
o_t = \sigma(W_{io} x_t + b_{io} + W_{ho} h_{t-1} + b_{ho})
ot=σ(Wioxt+bio+Whoht−1+bho)
Hidden State:
h
t
=
o
t
⊙
tanh
(
C
t
)
h_t = o_t \odot \tanh(C_t)
ht=ot⊙tanh(Ct)
公式内的变量如 W W W, b b b, x t x_t xt, h t − 1 h_{t-1} ht−1, 和 C t − 1 C_{t-1} Ct−1 分别代表权重矩阵、偏置项、当前输入、前一时间步的隐藏状态和细胞状态。
HOG(Histogram of Oriented Gradients)算法主要通过计算图像局部区域内的梯度方向直方图来描述这些区域的外观和形状,广泛用于图像中的物体检测。
HOG算法的基本步骤包括:
在HOG(Histogram of Oriented Gradients)算法中,计算图像梯度是一个关键步骤。图像梯度计算可以通过以下差分公式完成:
G
x
=
I
(
x
+
1
,
y
)
−
I
(
x
−
1
,
y
)
G_x = I(x+1, y) - I(x-1, y)
Gx=I(x+1,y)−I(x−1,y)
G
y
=
I
(
x
,
y
+
1
)
−
I
(
x
,
y
−
1
)
G_y = I(x, y+1) - I(x, y-1)
Gy=I(x,y+1)−I(x,y−1)
其中,
G
x
G_x
Gx 和
G
y
G_y
Gy 分别表示水平和垂直方向上的梯度,
I
(
x
,
y
)
I(x, y)
I(x,y) 是图像在位置
(
x
,
y
)
(x, y)
(x,y) 的像素值。
接下来,我们可以计算每个像素的梯度大小和方向:
Magnitude =
G
x
2
+
G
y
2
\sqrt{G_x^2 + G_y^2}
Gx2+Gy2
Angle =
tan
−
1
(
G
y
G
x
)
\tan^{-1}\left(\frac{G_y}{G_x}\right)
tan−1(GxGy)
这里,
tan
−
1
\tan^{-1}
tan−1 表示反正切函数,用于计算梯度的方向。这两个结果(大小和方向)随后用于构建方向梯度直方图,这是HOG特征描述符的核心部分。
具体来说,对于网络中的每个权重,都有一定概率 𝑝 将其临时置为零,而剩下的权重则保持不变。这样,每次前向传播时,网络的结构都会略有不同,这有助于模拟出训练多个不同网络的效果,并通过平均它们的预测来减少过拟合。
应用:语音识别
在语音识别中,GMM-HMM非常流行。HMM用于建模语音信号的时间序列特性(例如,语音单元的开始和结束),而GMM用于建模在这些语音单元中观察到的声学信号的概率分布。每个HMM状态可以对应于声音的一部分(如音素),而GMM则负责精确地建模这些音素的声学特征。
训练方法
GMM-HMM模型通常使用EM算法(期望最大化算法)进行参数估计。在语音识别的场景中,还会使用诸如Baum-Welch算法(一种特殊的EM算法,用于HMM)来调整模型参数,使其更好地拟合训练数据。
总结而言,GMM-HMM是一个强大的模型,能够有效地结合序列数据中的时间依赖性和观测数据的复杂统计特性,这使得其在多个领域内都有着广泛的应用。
整体架构说一下,新加一个层需要哪些步骤,卷积是怎么实现的,多卡机制,数据并行还是模型并行?
import torch.nn as nn
import torch
class CustomLinear(nn.Module):
def __init__(self, input_features, output_features):
super(CustomLinear, self).__init__()
self.weights = nn.Parameter(torch.randn(input_features, output_features))
self.bias = nn.Parameter(torch.randn(output_features))
def forward(self, x):
return x @ self.weights + self.bias
model = models.resnet50()
if torch.cuda.device_count() > 1:
model = nn.DataParallel(model)
model.to(device)
示例模型并行:
class ModelParallel(nn.Module):
def __init__(self, device0, device1):
super(ModelParallel, self).__init__()
self.layer1 = nn.Linear(10, 10).to(device0)
self.layer2 = nn.Linear(10, 5).to(device1)
def forward(self, x):
x = self.layer1(x)
x = x.to(device1)
return self.layer2(x)
https://www.cnblogs.com/alexme/p/11361563.html