笔记来自于网易云课堂
二分类问题
本文用到的符号约定:
假如我们想识别一幅图片是不是猫。也就是说,训练一个分类器,输入一幅图片,用特征向量
x
x
表示,输出是不是猫,用=0或1表示。
一幅图片在电脑中以R、G、B三个矩阵来表示,每个矩阵维度和图片维度一致。如果图片分辨率为64*64,那么每个矩阵都是64*64。
那么创建特征向量
x
x
如下
值得说明的是,好的符号惯例能够将不同训练样本的数据联系起来。
对于给定的样本, 如果有n个训练集,我们记为
x∈Rn×m
x
∈
R
n
×
m
,那么
x.shape=(m,n)
x
.
s
h
a
p
e
=
(
m
,
n
)
,
y
y
也是如此。
逻辑回归(logistic regression)
给定特征向量,算法就会评估图片里是猫的可能性。
首先给出参数说明:
这里用来表示预测值,我们可以用线性回归来表示预测值,如 y^=(wTx+b) y ^ = ( w T x + b ) ,但是线性并不靠谱,因为我们希望 y^∈(0,1) y ^ ∈ ( 0 , 1 ) ,故我们采用sigmoid函数来预测输出 σ(z)=11+e−z σ ( z ) = 1 1 + e − z , 如果z是一个很小的数,那么 σ(z) σ ( z ) 接近于0,如果z是一个很大的数,那 σ(z) σ ( z ) 接近于1,如果z靠近0,那么 σ(z) σ ( z ) 接近于0.5.
注意:
你可能会见过b当做特殊的w的情况,此时
x=1
x
=
1
,事实上,当你实现神经网络的时候,把b和w当做独立的参数时可能更好,所以这种做法不会被使用。
损失函数(loss function)
给定训练样本 (x(i),y(i)) ( x ( i ) , y ( i ) ) , 我们希望 y^(i)=y(i) y ^ ( i ) = y ( i ) ,这里 y^(i)=σ(wTxx(i)+b) y ^ ( i ) = σ ( w T x x ( i ) + b ) 。
为了训练w和b,我们需要定义一个损失函数或者误差函数(error function),它可以衡量算法的运行情况。实际上,我们定义损失函数为 L(y^,y)=−(ylogy^+(1−y)log(1−y^)) L ( y ^ , y ) = − ( y log y ^ + ( 1 − y ) log ( 1 − y ^ ) ) , 如果y=1, L(y^,y)=−logy^ L ( y ^ , y ) = − log y ^ ,那么 y^ y ^ 最够大时,损失函数足够小,如果y = 0, L(y^,y)=log(1−y^) L ( y ^ , y ) = log ( 1 − y ^ ) ,那么 y^ y ^ 最够小时,损失函数足够小。
我们可以定义损失函数为 L(y^,y)=12(y^−y)2 L ( y ^ , y ) = 1 2 ( y ^ − y ) 2 , 结果表明你可以这么做,但是在logistic 回归中大家都不这么做,因为当学习这些参数的时候,你会发现之后讨论的优化问题会变成非凸的,最后会得到很多个局部最优解,梯度下降法可能找不到全局最优解。
损失函数是在单个样本中定义的,它衡量了在单个训练样本中的表现。为了衡量整个样本集中的表现,我们定义成本函数(cost function),它是基于参数的总成本。 J(w,b)=1m∑mi=1L(y^(i),y(i)) J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) 。所以,在训练的时候,我们希望找到w和b使得成本函数足够小。
梯度下降法(gradient decent)
如何训练w和b呢?这里我们采用梯度下降法。显然,为了找到最合适的w和b,我们希望成本函数最小。如下图所示,实际上w可以是高维的,只是为了方便使用了实数。图中的最低点就是我们想要寻找的w和b。
可以看到,成本函数J是一个凸函数,像大碗一样,而这种性质是我们最看重的。当给定一个初始点,梯度下降法所做的就是找到最陡的下降方向,走到下一个位置。这就完成了一次迭代,经过多次迭代,很有可能会接近或者达到全局最优解。
为了便于编码,我们使用dw来表示 dj(w)dw d j ( w ) d w
repeat{
w=w−αdw w = w − α d w , α α 表示学习率,用来控制步长
}
直到收敛
从下图可以看到,不论dw>0或者dw<0,梯度下降法基本上都能达到或者接近最优解。