深度学习笔记(二)Logistic Regression 逻辑回归

一、Binary Classificatioin(二分分类)

(一)图像的表示方法

引入:给你一幅图片,识别出是否是猫(1:cat vs 0:non cat)。
在这里插入图片描述

原理:将二维图像表示为三原色(即red、green、blue),每一个原色可以用 64 × 64 64 \times 64 64×64的矩阵表示出来,在每一个像素点位置叠加,从而得到每个像素点的颜色。
在这里插入图片描述
很容易知道,1或0作为输出 y y y,而三原色矩阵中的元素作为输入 x x x
于是便产生了问题:怎样存储这 64 × 64 × 3 64 \times 64 \times 3 64×64×3个数字?
答案很简单,用 ( 64 × 64 × 3 ) × 1 (64 \times 64 \times 3) \times 1 (64×64×3)×1的特征向量存储,从红到绿到蓝依此遍历元素,向量维度为 n x = 12288. n_x=12288. nx=12288.

x = [ 255 231 . . . 255 134 . . . 255 134 . . . ] . x=\left[ \begin{matrix} 255\\231\\ ... \\255\\134\\...\\255\\134\\... \end{matrix} \right]. x=255231...255134...255134....

(二)符号表示方法(Notation)

( x , y ) (x,y) (x,y)为单独样本, x ∈ R n x , y ∈ { 0 , 1 } . x \in R^{n_x},y \in \{0,1\}. xRnx,y{0,1}.
m m m个训练样本: { ( x ( 1 ) , y ( 1 ) ) 、 ( x ( 2 ) , y ( 2 ) ) 、 . . . 、 ( x ( m ) , y ( m ) ) } . \{(x^{(1)},y^{(1)})、(x^{(2)},y^{(2)})、...、(x^{(m)},y^{(m)})\}. {(x(1),y(1))(x(2),y(2))...(x(m),y(m))}.
为更紧凑地表示出训练集,用矩阵的形式囊括:

X = [ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x ( 1 ) x ( 2 ) x ( 3 ) . . . x ( m ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] . X=\left[ \begin{matrix} ... & ... & ... & ... & ...\\ ... & ... & ... & ... & ... \\ x^{(1)} & x^{(2)} & x^{(3)} & ... & x^{(m)} \\ ... & ... & ... & ... & ... \\... &...&...&...&...\end{matrix} \right]. X=......x(1)............x(2)............x(3)...........................x(m).......

其中,列数 m m m是样本数量,行数 n x n_x nx是每个输入向量的维度。
注意!在深度学习中,我们通常采用如上列堆叠的方式,该约定方式可以让构建过程更简单。

x ∈ R n x × m . x \in R^{n_x \times m}. xRnx×m.
在python编程中,X.shape = (n_x, m)

同理,将标签 y y y放入列中,定义如下:
Y = [ y ( 1 ) y ( 2 ) y ( 3 ) . . . y ( m ) ] . Y=\left[ \begin{matrix} y^{(1)} & y^{(2)} & y^{(3)} & ... & y^{(m)} \end{matrix} \right]. Y=[y(1)y(2)y(3)...y(m)].
y ∈ R 1 × m . y \in R^{1\times m}. yR1×m.
在python编程中,Y.shape = (1, m)

符号表示方法小结:如果用好的惯例符号表示,能够将不同训练样本的数据联系起来。

三、Logistic回归基础知识

引入:以上一篇笔记中“判断是否是猫”的例子中,当给出输入 x x x时,我们希望得到一个概率结果,即是“是猫的概率有多大?”
即求解: y ^ = P { y = 1 ∣ x } . \widehat{y}=P\{y=1|x\}. y =P{y=1x}.
已知: x ∈ R n x . x\in R^{n_x}. xRnx.
参数: w ∈ R n x , b ∈ R . w\in R^{n_x},b\in R. wRnx,bR.
从而得到输出结果: z = w T + b . z=w^T+b. z=wT+b.
但是,这个关于 x x x的线性函数并不能将结果映射到 [ 0 , 1 ] [0,1] [0,1]区间内,即不能表达概率取值。
所以,在Logistic回归中,我们将 s i g m o i d sigmoid sigmoid函数作用到 w T + b w^T+b wT+b上,则有,
y ^ = s i g m o i d ( z ) . \widehat{y}=sigmoid(z). y =sigmoid(z).

s i g m o i d ( z ) = 1 1 + e − z . sigmoid(z)=\frac{1}{1+e^{-z}}. sigmoid(z)=1+ez1.

在这里插入图片描述
注:后文的参数 w / b w/b w/b的表示中,我们将这两个参数分开处理,而不采用将 w / b w/b w/b写在同一个参数向量中的方法。

四、逻辑回归的cost function(成本/代价函数)

我们需要通过给出的 m m m个样本的训练集来学习,找到最适合的参数 w / b w/b w/b,得到输出: y ^ ( i ) ≈ y ( i ) . \widehat{y}^{(i)} \approx y^{(i)}. y (i)y(i).
定义loss(error) function损失/误差函数:
L ( y ^ , y ) = 1 2 ( y ^ − y ) 2 . L(\widehat{y},y)=\frac{1}{2}(\widehat{y}-y)^2. L(y ,y)=21(y y)2.
但是,在逻辑回归中,不建议用如上的损失函数,因为学习参数时,讨论问题会变成非凸,那么对于梯度下降法来说就不好用(找到多个局部最优解但是可能找不到全局最优)
所以,我们定义了如下损失函数:
L ( y ^ , y ) = − ( y l o g y ^ + ( 1 − y ) l o g ( 1 − y ^ ) ) . L(\widehat{y},y)=-(ylog\widehat{y}+(1-y)log(1-\widehat{y})). L(y ,y)=(ylogy +(1y)log(1y )).
为什么选择这个函数作为损失函数?下面的式子可以解释原因:
在这里插入图片描述
简单总结即是:

  • y = 1 y=1 y=1时, y ^ ( i ) → 1 \widehat{y}^{(i)} \to 1 y (i)1使得 L ( y ^ , y ) L(\widehat{y},y) L(y ,y)最小;
  • y = 0 y=0 y=0时, y ^ ( i ) → 0 \widehat{y}^{(i)} \to 0 y (i)0使得 L ( y ^ , y ) L(\widehat{y},y) L(y ,y)最小;

以上的损失函数衡量了单个样本上的表现,现在定义cost function成本函数来衡量在整个样本上的表现:
J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) . J(w,b)=\frac{1}{m}\sum_{i=1}^m L(\widehat{y}^{(i)},y^{(i)}). J(w,b)=m1i=1mL(y (i),y(i)).

J ( w , b ) = − 1 m ∑ i = 1 m [ y ( i ) l o g y ^ ( i ) + ( 1 − y ( i ) ) l o g ( 1 − y ^ ( i ) ) ] . J(w,b)=-\frac{1}{m}\sum_{i=1}^m[y^{(i)}log\widehat{y}^{(i)}+(1-y^{(i)})log(1-\widehat{y}^{(i)})]. J(w,b)=m1i=1m[y(i)logy (i)+(1y(i))log(1y (i))].

  • loss损失函数:单个样本的表现
  • cost成本函数:整个样本的表现

五、Gradient Descent(梯度下降法)

总体成本函数:
J ( w , b ) = − 1 m ∑ i = 1 m [ y ( i ) l o g y ^ ( i ) + ( 1 − y ( i ) ) l o g ( 1 − y ^ ( i ) ) ] . J(w,b)=-\frac{1}{m}\sum_{i=1}^m[y^{(i)}log\widehat{y}^{(i)}+(1-y^{(i)})log(1-\widehat{y}^{(i)})]. J(w,b)=m1i=1m[y(i)logy (i)+(1y(i))log(1y (i))].
w 和 b w和b wb放在两个坐标轴上,则 J ( w , b ) J(w,b) J(w,b)即是函数图像上的一个点,我们需要找到的点就是图像的最低点,如下:
在这里插入图片描述
成本函数是一个凸函数,所以不管怎样初始化参数,最终都应该达到一个大致相同的点。
这里我们采用的方法是“梯度下降法”。
梯度下降法:从初始点开始,朝最陡的下坡方向走一步(尽可能快得往下走),这便是梯度下降的第一次迭代过程。继续迭代,最终希望能收敛到全局最优或接近全局最优。
在这里插入图片描述
为了更直观地展示梯度下降法,以 w w w J ( w ) J(w) J(w)为例画出二维平面坐标系,要做的工作是不断更新 w w w使得 J ( w ) J(w) J(w)达到最小值。
在这里插入图片描述

w : = w − α d J ( w ) d w . w :=w-\alpha\frac{d J(w)}{dw}. w:=wαdwdJ(w).
其中,式子中的:=符号表示更新变量值, α \alpha α是学习率。在编程中,通常将 d J ( w ) d w \frac{d J(w)}{dw} dwdJ(w)写作 d w dw dw,即上式可简化为:
w : = w − α d w . w :=w-\alpha dw. w:=wαdw.
于是接着分析 J ( w , b ) J(w,b) J(w,b)中的参数更新,有如下式子:
w : = w − α ∂ J ( w , b ) ∂ w . w:=w-\alpha \frac{\partial J(w,b)}{\partial w}. w:=wαwJ(w,b).

b : = b − α ∂ J ( w , b ) ∂ b . b:=b-\alpha \frac{\partial J(w,b)}{\partial b}. b:=bαbJ(w,b).
同样的,编程时 ∂ J ( w , b ) ∂ w \frac{\partial J(w,b)}{\partial w} wJ(w,b)写作 d w dw dw ∂ J ( w , b ) ∂ b \frac{\partial J(w,b)}{\partial b} bJ(w,b)写作 d b . db. db.

六、逻辑回归中的梯度下降

z = w T x + b y ^ = a = σ ( z ) = 1 1 + e − z L ( a , y ) = − ( y l o g ( a ) + ( 1 − y ) l o g ( 1 − a ) ) z=w^Tx+b\\\widehat{y}=a=\sigma(z)=\frac{1}{1+e^{-z}}\\L(a,y)=-(ylog(a)+(1-y)log(1-a)) z=wTx+by =a=σ(z)=1+ez1L(a,y)=(ylog(a)+(1y)log(1a))
假设样本2个特征 x 1 , x 2 x_1,x_2 x1,x2,同时存在参数 w 1 , w 2 , b . w_1,w_2,b. w1,w2,b.
在这里插入图片描述
根据计算图的反向传播算法(链式求导法则),我们得到如下计算结果:
d a = L ( a , y ) d a = − y a + 1 − y 1 − a d z = d L ( a , y ) d z = d L ( a , y ) d a d a d z da=\frac{L(a,y)}{da}=-\frac{y}{a}+\frac{1-y}{1-a}\\ dz=\frac{dL(a,y)}{dz}=\frac{dL(a,y)}{da}\frac{da}{dz} da=daL(a,y)=ay+1a1ydz=dzdL(a,y)=dadL(a,y)dzda
那么问题来了!这个问题也是课程中大家积极讨论的地方—— d a d z \frac{da}{dz} dzda怎么求解?
a = σ ( z ) = 1 1 + e − z ⇒ d a d z = e − z ( 1 + e − z ) 2 = a ( 1 − a ) a=\sigma(z)=\frac{1}{1+e^{-z}}\\ \Rightarrow \frac{da}{dz}=\frac{e^{-z}}{(1+e^{-z})^2}=a(1-a) a=σ(z)=1+ez1dzda=(1+ez)2ez=a(1a)
其实就是涉及到将关于自变量z的分式代换回关于因变量a的分式。
最终计算得到:
d z = a − y . dz=a-y. dz=ay.
紧接着往左计算,
d w 1 = x 1 d z d w 2 = x 2 d z d b = d z dw_1=x_1dz\\dw_2=x_2dz\\db=dz dw1=x1dzdw2=x2dzdb=dz
得出上述导数值后,即可实现单个样本实例的一次梯度更新步骤,根据梯度下降法中参数的调整方法使得结果趋近于全局最优。
w 1 : = w 1 − α d w 1 w 1 : = w 2 − α d w 2 b : = b − α d b w_1:=w_1-\alpha dw_1\\w_1:=w_2-\alpha dw_2\\b:=b-\alpha db w1:=w1αdw1w1:=w2αdw2b:=bαdb
注意:更新参数值用:=符号表示。

然而我们知道,训练模型时不仅仅只有一个训练样本,当有 m m m个样本的整个训练集时,我们将如何应用逻辑回归的梯度下降法?

七、m个样本的梯度下降

将逻辑回归中的梯度下降应用到 m m m个样本中,其实就是用一个大循环对 m m m个样本进行参数计算,进而求和求平均得到全局梯度值。
在这里插入图片描述
算法伪代码
在这里插入图片描述
算法的缺点及改进

  • 算法使用两个完全显式 f o r for for循环可能会使算法低效——1到 m m m个样本的计算过程、遍历所有特征( d w 1 , . . . , d w n , dw_1,...,dw_n, dw1,...,dwn, 维度是 n x n_x nx
  • 完全不用完全显式for循环,能处理更大的数据集。有一门向量化技术,可以摆脱显式 f o r for for循环!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.zwX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值