逻辑回归梯度下降法向量化
Posted 劳埃德·福杰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逻辑回归梯度下降法向量化相关的知识,希望对你有一定的参考价值。
1.二分类(Binary Classification)问题
二分类问题就是简单的“是否”、“有无”问题,例如判断一张图片中是否有猫。
对机器来说,分辨这张图,需要读取这幅图的数字特征。
计算机保存一张图片,要保存三个独立矩阵,分别对应红绿蓝三个颜色通道。
我们可以定义一个特征向量x,把图片的所有像素值取出来放到这个特征向量里。如果这个图片是64x64的,那么这个特征向量的总维度n=64x64x3=12288。
识别这张图片,就是以图片的的特征向量x作为输入,预测输出的结果标签y是0还是1。
2.逻辑回归(Logistic Regression)
逻辑回归是一种用于解决二分类问题的机器学习方法,用于估计某种事物的可能性。
例:如果我们想要知道一张图片是猫的概率 ŷ。已知特征向量x和logistic回归的两个参数:w(n维向量)和b(实数),如何预测 ŷ ?
? 不行,考虑到0<=ŷ<=1,这样的线性回归很难实现。
所以要在外面套一个sigmoid 函数:,。
如下图,sigmoid 函数是一条值域在[0,1]的平滑曲线。
为了训练logistic回归模型的参数w和b,需要定义一个成本函数(cost function)。
首先,定义一个损失函数(Loss function)来衡量预测值 ŷ 和y的实际值有多近:
。(log省略的底数为10)
显然,我们希望损失函数尽可能地小。
y=0,f(ŷ,y) = -log(1-ŷ),f 要小,ŷ 要尽可能小,考虑到 ŷ 的取值范围,我们希望 ŷ 趋近于0。
y=1,f(ŷ,y) = -ylog(ŷ),f 要小,ŷ 要尽可能大,我们希望 ŷ 趋近于1。
Loss function是在单个训练样本中定义的,它衡量了在单个训练样本上的表现。
cost function 衡量的是在全体训练样本上的表现,如下:。
我们的目标就是找到使得成本函数尽可能小的w和b。
为方便绘图,我们假设w和b都是实数,在实践中w可以是更高维的。
为了找到更好的w和b,我们通常给它们一个初始值,然后从初始点开始,向最陡的下坡方向走一步,这就是梯度下降的一次迭代,然后通过不断的迭代,逐渐收敛到全局最优解。
3.梯度下降法
首先,看看梯度下降如何应用到logistic回归的一个训练样本上。(假设w只有2个维度,b为实数)
,
,,
对m个样本应用梯度下降,具体的一次迭代怎么做?
J=0, dw1=0,dw2=0,...,dwn=0,db=0
for i=1 to m:
,,,
,,,
:=,:=,b:=,α为学习率
4.向量化(Vectorization)
上面的计算,正常需要两个for循环,一个用来遍历m个训练样本,一个用来遍历n个特征(上文的w我们简化成2维的,所以没遍历)。
而显式地使用for循环效率很低,用向量化运算来代替显式的for循环,能让程序运行地更快。
验证:
# 打开cmd
pip install jupyter # 提前安装好jupyter notebook
pip install ipykernel # 安装ipykernel包
conda create -n deeplearning # 创建虚拟环境
conda activate deeplearning # 进入虚拟环境
conda install -n deeplearning numpy # 安装numpy
deactivate # 退出虚拟环境
python -m ipykernel install --name deeplearning # 将deeplearning虚拟环境写入notebook的kernel中
jupyter notebook # 启动jupyter notebook
# 在jupyter notebook使用虚拟环境,如下图
测试代码
import numpy as np
import time
a = np.random.rand(1000000)
b = np.random.rand(1000000)
tic = time.time()
c = np.dot(a, b) # 向量内积
toc = time.time()
print(c)
print("Vectorized version:" + str(1000*(toc-tic)) + "ms")
c = 0
tic = time.time()
for i in range(1000000):
c += a[i]*b[i]
toc = time.time()
print(c)
print("For loop:" + str(1000*(toc-tic)) + "ms")
5.在逻辑回归上应用向量化
...,...,...,...
np.dot()+b
np.sum(dZ)
W:=,b:=,α为学习率
以上是关于逻辑回归梯度下降法向量化的主要内容,如果未能解决你的问题,请参考以下文章