Logistic Regression as a Neural Network
sigmoid
在logistic regression后加一个非线性函数,例如sigmoid()可以使输出满足概率特性
0≤Pi≤1
∑Pi=1
损失Loss函数$L$
损失函数常用预测值和标签的交叉熵定义:
L(ˆy,y)=−(y∗logˆy+(1−y)∗log(1−ˆy))
y代表标签,ˆy代表预测值
##成本Cost函数$J$
成本函数是损失函数$L$的求和取均值,是对整个训练集定义的
J(w,b)=1mm∑i=1L(ˆy(i),y(i))
梯度下降法
整个神经网络训练的目的就是使成本函数J(w,b)最小,可以用梯度下降法调整w和b满足要求,梯度下降可以定义为下面的形式,通过反复迭代找到最优解
Repeat:{
w:=w−αdJ(w,b)dw
b:=b−αdJ(w,b)db
}#α代表学习率
计算图
把一个计算过程用图形的方式表示出来,方便前向计算和反向求导
单层神经网络的梯度下降应用
若神经网络可以定义为:
z=w1x1+w2x2+b$——>$a=σ(z)$——>$L(a,y)
dLda=−ya+1−y1−a
dLdz=dLda∗dadz=a−y
Python和向量化
基于CPU和GPU都有并行化的SIMD(singal instraction multiply data)指令,如果用python内置函数例如np.dot(),可以充分利用并行性去快速计算
在Python与Numpy编程中需要特别注意变量的维数,例如下面几种定义代表不同的类型
a = np.random.rand(5) #(5,)
b = np.random.rand(5,1) #(5,1)
c = np.random.rand(1,5) #(1.5)
所以十分有必要在代码中用assert语句检验变量的维数,或者reshape()函数改变变量的维度:
c = c.reshape(5,1)
assert(c.shape == (5,1))