从逻辑回归开始入门深度学习

本文介绍了从逻辑回归开始学习深度学习的过程,详细讲解了逻辑回归的原理、损失函数、梯度下降以及计算图。通过单个样本和多样本的计算,展示了逻辑回归的优化过程。接着讨论了浅层神经网络(2层)的前向传播和反向传播,并扩展到深层神经网络。文章总结了神经网络的计算流程,强调了向量化计算在提高效率方面的重要性。

从逻辑回归开始入门深度学习

本文主要来源于吴恩达《深度学习与神经网络》。本文根据课程内容做一个串联。

本文内容安排如下:

  • 符号定义
  • 逻辑回归LR:定义、实现、高效实现
  • 浅层神经网络(2层):实现、优化
  • 深度神经网络:实现、优化、应用

我们以一个分类问题作为研究背景。研究问题为判断输入图片是否为猫咪的二分类。

符号定义

在解决问题之前,我们先对使用的数学符号做一个定义:

  • (x, y): 输入样本; x ∈ RnxR^{n_x}Rnx, y ∈ {0, 1}
  • { (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))}: 训练数据集,包含m个训练样本
  • [a,b,c,…,z].T: 向量,默认情况下,向量指的是列向量
  • m=mtrainm = m_{train}m=mtrain, mtestm_{test}mtest=#test examples
  • $X \in R^{n_x * m} :训练集,训练样本以∗∗列的方式∗∗进行堆叠,换言之,X矩阵的每一列是一个样本,而不是行;X.shape=(: 训练集,训练样本以**列的方式**进行堆叠,换言之,X矩阵的每一列是一个样本,而不是行; X.shape = (:XX.shape=(n_x$, m)
  • Y∈R1∗mY \in R^{1*m}YR1m: 训练标签,标签以列的方式进行堆叠, Y.shape=(1,m)Y.shape = (1,m)Y.shape=(1,m)

逻辑回归

在介绍逻辑回顾处理图片分类。我们处理的问题是二分类,输入一张图片判断图片中是否有猫。输入图片格式为RGB三色图,像素取值为0~255。

img

原理介绍

逻辑回归用于处理二分类问题。逻辑回归中h^=P(y=1∣x)\hat{h} = P(y=1|x)h^=P(y=1x)用于计算输入样本为1的概率。以单个样本为例,其计算公式为
y^=sigmoid(wTx+b) \hat{y} = sigmoid(w^Tx+b) y^=sigmoid(wTx+b)
其中,x∈Rnxx \in R^{n_x}xRnx, w∈Rnxw \in R^{n_x}wRnx ,b∈Rb \in RbR。输出结果的取值范围为[0, 1]。

逻辑回归其实是线性回归的进一步加工,线性回归计算结果的取值范围为(−∞,+∞)(-\infty, +\infty)(,+),我们将线性回归的计算结果使用sigmoid将范围压缩到[0, 1].

Sigmoid是一种非线性的S型函数,取值范围在[0, 1],这种输出值可以别理解为概率表示。Sigmoid函数的计算公式和曲线如下。
Sigmoid(z)=11+e−z Sigmoid(z) = \frac{1}{1+e^{-z}} Sigmoid(z)=1+ez1
Sigmoid

从上图可以看出,sigmoid取值范围为[0, 1],当自变量z非常小时,sigmoid趋近于0;当z非常大时,sigmoid趋近于1(实际上当z=10时,输出值为0.9999,非常趋近于1)。

Loss function

我们现在知道了如何使用逻辑回归计算一个样本为正例的概率,那么如何评估模型的好坏呢?这就依赖于损失函数。

给定一个样本(x(i),y(i))(x^{(i)}, y^{(i)})(x(i),y(i)),使用逻辑回归计算这个样本为正例的概率P(y=1|x),
y^(i)=σ(wTx(i)+b),where σ(z)=11+e−z \hat{y}^{(i)} = \sigma(w^Tx^{(i)} + b), where \ \sigma(z)=\frac{1}{1+e^{-z}} y^(i)=σ(wTx(i)+b),where σ(z)=1+ez1
理想情况下,输出结果y^\hat yy^应该和样本标签y尽可能相等,即y^(i)≈y(i)\hat y^{(i)} \approx y^{(i)}y^(i)y(i)
L(y^,y)=−(ylogy^+(1−y)log(1−y^)) L(\hat y, y) = -(ylog\hat y + (1-y)log(1-\hat y)) L(y^,y)=(ylogy^+(1y)log(1y^))
当y=1时,L(y^,y)=−logy^L(\hat y, y)=-log\hat yL(y^,y)=logy^;当y=0时,L(y^,y)=−log(1−y^)L(\hat y, y) = -log(1-\hat y)L(y^,y)=log(1y^).

在全部训练样本上,损失函数cost function为
J(w,b)=1m∑i=1mL(y^,y)=−1m∑i=1m[y(i)logy^(i)+(1−y(i))log(1−y^(i))] J(w, b) = \frac1{m}\sum_{i=1}^m L(\hat y, y) = -\frac1{m}\sum_{i=1}^m[y^{(i)}log\hat y^{(i)} + (1-y^{(i)})log(1-\hat y^{(i)})] J(w,b)=m1i=1mL(y^,y)=m1i=1m[y(i)logy^(i)+(1y(i))log(1y^(i))]
损失函数是参数w,b的函数,我们想要通过最小化损失函数找到最佳的参数w,b,最后用于样本的预测[通过最小化损失函数,我们可以保证预测结果与真实样本标签之间差距尽可能小,进而保证预测结果的准确性]。

LR损失函数可以使用最大似然估计来进行推导。

Gradient Descent

知道了模型的损失函数,接下来就是通过最小化损失函数得到最终的参数w,b。常用的方法是使用梯度下降法,使用当前位置的偏导数对参数进行更新,反复多次后,损失函数到达最低点,此时w,b即为最终结果。

Gradient Descent

使用梯度下降算法,w,b的更新公式如下:
w=w−α∂J(w,b)∂wb=b−α∂J(w,b)∂b w = w - \alpha \frac{\partial J(w, b)}{\partial w} \\b = b - \alpha \frac{\partial J(w, b)}{\partial b} w=wαwJ(w,b)b=bαbJ(w,b)
其中,α\alphaα为学习率,含义是每次参数更新的步幅;如果α\alphaα过大,导致参数更新幅度过大,可能会错过模型的最优值;如果α\alphaα过下,导致每次更新幅度很小,模型需要更多的迭代次数才能收敛。在程序代码中,我们使用dw表示∂J(w,b)∂w\frac{\partial J(w, b)}{\partial w}wJ(w,b), db表示∂J(w,b)∂b\frac{\partial J(w, b)}{\partial b}bJ(w,b).

计算图

神经网络的计算过程一般分为两个阶段:前向传播和反向传播。使用计算图来描述计算过程更清晰:将整个计算过程分步骤进行计算。

假设J(a, b, c) = 3(a + bc),其中a=5, b=3, c=2.这个计算过程可以使用计算图来描述,如:

设定u = bc, v = a + u, J=3v.

反向传播过程,需要计算da, db, dc.此时,可以通过计算图依据链式法则进行计算。
∂J∂a=∂J∂v∗∂v∂a=3∗1=3 \frac{\partial J}{\partial a} = \frac{\partial J}{\partial v} * \frac{\partial v}{\partial a} = 3 * 1 = 3 aJ=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值