hnyzyty 2018-08-04
损失函数是输出标量值的目标函数,它能让我们了解我们的预测值与原来的预测值有何不同。这些目标函数发现谓词与原始输出之间的差异。在构建神经网络模型时,选择这些损失函数是关键任务。如果我们选择了一个错误的损失函数,它就会破坏我们神经网络模型的结构。
根据神经网络执行的任务,有不同类型的损失函数可用。人们已经声明了以下任务:这些损失函数最有效:
让我们更详细地了解每一个损失函数:
If M = 2:
log_loss = -(orig*log(predict) + (1-orig)*log(1-predict))
If M > 2:
log_loss = ∑(orig * log(predict)) from P of E = 0 to M
Where, P = Correct probability for example E
E = Example
l2_loss = ∑(predict - orig)**2 from 0 to n
l1_loss = ∑ |predict - orig| from 0 to n
激活是任何激活函数的输出。任何神经网络层将给定输入与当前层的权重相乘,并向该乘积添加偏差,即线性运算。这种线性操作称为中间激活。由于这些中间激活只需要学习一个简单的线性决策边界,所以为了学习复杂的决策边界,我们将非线性添加到这个中间的激活中,这只是将非线性函数应用于这些中间激活。有许多非线性函数,如sigmoid, ReLu, Leaky ReLu, tanh等,这些被称为激活函数。这些激活函数的输出称为激活。
For hidden layer:
W = Weights (shape = p x f)
X = Inputs (shape = f x n)
B = bias
intermediate_activation = W*X + B = Z
Let,
sigmoid activation function F(z) = 1/(1+e^-z)
A = F(Z) = F(W*X + B)
Here A is called as Activation.
神经网络可以通过多种方式进行优化。超参数调整,小批量梯度下降,批量归一化等是用于优化神经网络的一些技术。
Mini-Batch梯度下降允许我们在许多示例中执行高效计算。在该方法中,大小为m的整个数据集被分成批量大小的bs。因此,批次总数是
Total no. of batches = m / bs
在Mini-Batch中,计算梯度下降模型误差,并且仅在每个小批量结束时更新权重。实施可以变化,以获取批次上所有梯度的总和,或者取批次中所有梯度的平均值。该方法在随机梯度下降(每个例子更新的权重)和批量梯度下降(每个epoch之后更新的权重)之间给出平衡。最快的学习是在Mini-Batch梯度下降。
设置适当的批量大小:
Let M = total no. of samples
For M <= 20,000:
Use batch-gradient descent
For M > 20,000:
set bs = 4, 8, 16, 32, 64, 128, 256, 512
改进梯度下降的另一种更好的方法是使用momentum、RMSprop和ADAM算法。这些是梯度下降优化算法,用来加速收敛到全局最小。掌握指数加权平均数可能有助于更清楚地了解这些优化算法是如何工作的。
加权平均:
指数加权平均:
Let Vt be the average of current instance.
In general,
Vt = β*Vt-1 + (1-β)*θt
Where,
Vt = Current average
Vt-1 = Previous average
β = Parameter for optimisation of Vt
θ = Current Value
上面的等式告诉我们,为了计算Vt,我们需要Vt-1,这是先前的平均值。
使用momentum的梯度下降:
Compute dW, dB
VdW = β1*VdW + (1-β1)*dW
Vdb = β1*Vdb + (1-β1)*db
W = W - α*Vdw
B = B - α*Vdb
使用RMSprop的梯度下降:
这是一种梯度下降优化算法,就像“momentum”一样。
SdW = β2*SdW + (1-β2)*dW2
Sdb = β2*Sdb + (1-β2)*db2
W = W - α*(dW/√(Sdw + ε))
b = b - α*(db/√(Sdb + ε))
Where,
ε = 10^-8
使用ADAM进行梯度下降:
它是momentum和RMSprop的结合。
VdW = β1*VdW + (1-β1)*dW
Vdb = β1*Vdb + (1-β1)*db
SdW = β2*SdW + (1-β2)*dW^2
Sdb = β2*Sdb + (1-β2)*db^2
Adding bias correction to Vdw Vdb Sdw Sdb:
Vdwcorr = Vdw/(1 - βt1`) Vdbcorr = Vdb/(1 - βt1`)
Sdwcorr = Sdw/(1 - βt2`) Sdbcorr = Vdb/(1 - βt2`)
Updating weights:
W = W - (α*Vdwcorr )/√(Sdwcorr + ε)
S = S - (α*Vdbcorr )/√(Sdbcorr + ε)
指数加权平均值的偏差校正由下式给出:
Vt = Vt / (1 - βt)