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

一、Binary Classificatioin(二分分类算法)

(一)图像的表示方法

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

原理:将二维图像表示为三原色(即red、green、blue),每一个原色可以用64×6464 \times 64的矩阵表示出来,在每一个像素点位置叠加,从而得到每个像素点的颜色。
在这里插入图片描述

很容易知道,1或0作为输出yy,而三原色矩阵中的元素作为输入xx
于是便产生了问题:怎样存储这64×64×364 \times 64 \times 3个数字?
答案很简单,用(64×64×3)×1(64 \times 64 \times 3) \times 1的特征向量存储,从红到绿到蓝依此遍历元素,向量维度为nx=12288.n_x=12288.

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

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

(x,y)(x,y)为单独样本,xRnx,y{0,1}.x \in R^{n_x},y \in \{0,1\}.
mm个训练样本:{(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].

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

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

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

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

三、Logistic回归基础知识

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

sigmoid(z)=11+ez.sigmoid(z)=\frac{1}{1+e^{-z}}.

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

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

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

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

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

J(w,b)=1mi=1m[y(i)logy^(i)+(1y(i))log(1y^(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)})].

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

五、Gradient Descent(梯度下降法)

总体成本函数:
J(w,b)=1mi=1m[y(i)logy^(i)+(1y(i))log(1y^(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)})].
wbw和b放在两个坐标轴上,则J(w,b)J(w,b)即是函数图像上的一个点,我们需要找到的点就是图像的最低点,如下:
在这里插入图片描述
成本函数是一个凸函数,所以不管怎样初始化参数,最终都应该达到一个大致相同的点。
这里我们采用的方法是“梯度下降法”。
梯度下降法:从初始点开始,朝最陡的下坡方向走一步(尽可能快得往下走),这便是梯度下降的第一次迭代过程。继续迭代,最终希望能收敛到全局最优或接近全局最优。
在这里插入图片描述

为了更直观地展示梯度下降法,以wwJ(w)J(w)为例画出二维平面坐标系,要做的工作是不断更新ww使得J(w)J(w)达到最小值。
在这里插入图片描述

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

b:=bαJ(w,b)b.b:=b-\alpha \frac{\partial J(w,b)}{\partial b}.
同样的,编程时J(w,b)w\frac{\partial J(w,b)}{\partial w}写作dwdwJ(w,b)b\frac{\partial J(w,b)}{\partial b}写作db.db.

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

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

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

七、m个样本的梯度下降

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

算法伪代码

在这里插入图片描述

算法的缺点及改进

  • 算法使用两个完全显式forfor循环可能会使算法低效——1到mm个样本的计算过程、遍历所有特征(dw1,...,dwn,dw_1,…,dw_n, 维度是nxn_x
  • 完全不用完全显式for循环,能处理更大的数据集。有一门向量化技术,可以摆脱显式forfor循环!
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享