神经网络解决Logistic回归问题及公式向量化推导

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/quiet_girl/article/details/80033951

一、Logistic问题描述

1、训练集和测试集表示

(1) 有m个训练样本,训练集表示为: { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) } 。其向量化表示为:

X = [ x ( 1 ) x ( 2 ) x ( m ) ]
X 的维度是 ( n x , m ) ,其中 n x 表示一个样本的所有特征(举例:对于一个图片来说,其所有特征就是RGB下的所有的像素点,若图片大小为64*64,则 n x = 64 64 3 )。 x ( i ) 是一个向量,表示一个样本。
(2) m个样本对应m个label,因此Y的表示如下:
Y = [ y ( 1 ) y ( 2 ) y ( m ) ]
Y 的维度是(1, m)。

2、Logistic回归

Logistic回归的方程是 y ( i ) = σ ( w T x + b ) ,其中 σ ( z ( i ) ) = 1 1 + e z ( i )
给定训练集 { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) } ,我们希望样本的预测结果 y ^ ( i ) 与实际结果 y ( i ) 尽可能地接近。
其代价函数如下:
在Logistic回归模型中,我们并不使用平方和作为我们的目标函数,我们设定的目标函数如下:

L ( y ^ , y ) = ( y l o g y ^ + ( 1 y ) l o g ( 1 y ^ ) )
为了验证其可行性,我们可将其分开考虑:
①若y=1,则 L ( y ^ , y ) = l o g y ^ ,若想要使得损失函数最小,则需要 y ^ 最大,这满足回归的任务要求。
②若y=0,则 L ( y ^ , y ) = l o g ( 1 y ^ ) ,若想要使得损失函数最小,则需要 y ^ 最小,也满足回归的任务要求。
因此,Logistic回归的代价函数便是所有样本的损失函数之和,使用公式表示如下:
J ( w , b ) = 1 m i = 1 m L ( y ^ ( i ) , y ( i ) ) = 1 m i = 1 m [ y ( i ) l o g y ^ ( i ) + ( 1 y ( i ) ) l o g ( 1 y ^ ( i ) ) ]
下面的内容中为了方便运算,我们以L函数来进行分析,在最后的过程中才将其转化为J, J = 1 m L

3、转化为神经网络预测模型

Logistic回归问题可以简单地转化为两层的神经网络(也可以叫做单隐层神经网络),其结构图如下:

输入值 x ( i ) 是一个样本向量, w 是参数,此预测模型先基于线性模型,然后经过激励函数得到最终的预测值。

二、前向传播和后向传播

1、前向传播

下面使用一简单的例子介绍前向传播,如下图:

前向传播和我们平时的思维是一致的,即给出输入,通过一次次变换得到输出。

2、后向传播

参数的更新过程是算法结果不断优化的过程:输入数据,根据前向传播可以得到预测值,将预测值和真实值进行比较,得到损失函数,基于损失函数,更新参数,使得每一次的迭代过程损失函数都会减小,这就是更新的主要思想。
下面主要讲后向传播及其推理过程,两层神经网络的模型如下:

反向传播的过程就是从后向前更新参数的过程,更新参数的规则如下:
w := w α d J ( w , b ) d w b := b α d J ( w , b ) d b

为了求取参数更新的公式,我们有如下的求导过程:
已知:
z = w T x + b y ^ = a = σ ( z ) L ( a , y ) = ( y l o g a + ( 1 y ) l o g ( 1 a ) )

求dw的过程:
d w = L ( w , b ) d w = d L ( w , b ) d a d a d z d z d w ( ) = ( y a + 1 y 1 a ) a ( 1 a ) x = ( a y ) x
又因为:
d z = L ( w , b ) d z = d L ( w , b ) d a d a d z = ( y a + 1 y 1 a ) a ( 1 a ) = a y
因此: d w = d z x
求db的过程:
d b = L ( w , b ) d b = d L ( w , b ) d a d a d z d z d b ( ) = ( y a + 1 y 1 a ) a ( 1 a ) 1 = a y
因此, d b = d z

三、m个样本的梯度下降

下图是一次迭代过程的伪代码:

对于一次迭代的过程,便是先前向传播,更加前向传播的结果后向传播不断更新参数。
对于T次迭代过程的计算,只需要在一次迭代过程外面加一个for循环即可。

四、向量化

1、Z的向量化

Z = [ z ( 1 ) z ( 2 ) z ( m ) ] = [ w T x ( 1 ) + b w T x ( 2 ) + b w T x ( m ) + b ] = [ w T x ( 1 ) w T x ( 2 ) w T x ( m ) ] + [ b b b ] = w T X + b

2、A的向量化

A = [ a ( 1 ) a ( 2 ) a ( m ) ] = [ σ ( z ( 1 ) ) σ ( a ( 2 ) ) σ ( a ( m ) ) ] = σ ( Z )

3、J的向量化

J = 1 m i = 1 m [ y ( i ) l o g a ( i ) + ( 1 y ( i ) ) l o g ( 1 a ( i ) ) ] = 1 m i = 1 m y ( i ) l o g a ( i ) 1 m i = 1 m ( 1 y ( i ) ) l o g ( 1 a ( i ) ) = 1 m ( y ( 1 ) l o g a ( 1 ) + y ( 2 ) l o g a ( 2 ) + . . . + y ( m ) l o g a ( m ) ) 1 m [ ( 1 y ( 1 ) ) l o g ( 1 a ( 1 ) ) + ( 1 y ( 2 ) ) l o g ( 1 a ( 2 ) ) + . . . + ( 1 y ( m ) ) l o g ( 1 a ( m ) ) ] = 1 m [ y ( 1 ) y ( 2 ) y ( m ) ] [ l o g a ( 1 ) l o g a ( 2 ) l o g a ( m ) ] 1 m [ 1 y ( 1 ) 1 y ( 2 ) 1 y ( m ) ] [ l o g ( 1 a ( 1 ) ) l o g ( 1 a ( 2 ) ) l o g ( 1 a ( m ) ) ] = 1 m Y l o g A T 1 m ( 1 Y ) l o g ( 1 A T )

4、dz的向量化

已知:

d z ( 1 ) = a ( 1 ) y ( 1 ) d z ( 2 ) = a ( 2 ) y ( 2 ) . . . d z ( m ) = a ( m ) y ( m )

又因为:
d Z = [ d z ( 1 ) d z ( 2 ) d z ( m ) ] A = [ a ( 1 ) a ( 2 ) a ( m ) ] Y = [ y ( 1 ) y ( 2 ) y ( m ) ]

因此:
d Z = [ d z ( 1 ) d z ( 2 ) d z ( m ) ] = [ a ( 1 ) y ( 1 ) a ( 1 ) y ( 2 ) a ( m ) y ( m ) ] = [ a ( 1 ) a ( 2 ) a ( m ) ] [ y ( 1 ) y ( 2 ) y ( m ) ] = A Y

5、dw的向量化

d w = 1 m ( x ( 1 ) d z ( 1 ) + x ( 2 ) d z ( 2 ) + . . . + x ( m ) d z ( m ) ) = 1 m [ x ( 1 ) x ( 2 ) x ( m ) ] [ d z ( 1 ) d z ( 2 ) d z ( m ) ] = 1 m X d Z T

6、db的向量化

d b = 1 m i = 1 m d z ( i ) = 1 m n p . s u m ( d Z )

注: np.sum(dZ)是调用python中numpy库的一个函数,其功能是将矩阵的所有元素相加。

7、向量化之后的实现逻辑回归过程

注:这里展示的伪代码都是一次迭代过程,若需要多次迭代,则需要在外层增加for循环。



参考文献:
1、本内容主要来自于coursera上的dl视频,在此加上一些自己的看法和理解。
2、一步步手写神经网络

猜你喜欢

转载自blog.csdn.net/quiet_girl/article/details/80033951
今日推荐