导语
对于这章内容,首先会讲解一下损失函数,然后讲解梯度下降,最后讲解逻辑回归模型。
废话不多说。
上一章知识链接(损失函数)
下表包含的对于各个量的标记符号。
专业术语 | 标记 |
---|---|
特征(features) | x, x_train |
目标(targets) | y,y_train |
参数(parameters) | w(weight),b(bias),w ,b |
样本容量(parameters) | m,m |
第i个样本(ithi_{th}Training Example) | x(i)x^{(i)}, y(i)y^{(i)}, x_i , y_i |
第i个样本的预测值(The result of ithi_{th}training Example) | fw,b(x(i))f_{w,b}(x^{(i)}),f_wb |
预测值(prediction) | y−haty-hat,y-hat |
回想一下,你有一个Linear Regression Model,“y=wx+by=wx+b”,你初始化了它两个参数的值,输入特征值得到了一串预测值,通过损失函数与目标值,就得到了你初始的整个模型的损失有多大。
损失函数:
J(w,b)=12m∑i=0m−1(fw,b(x(i))−y(i))2J(w,b) = frac{1}{2m} sumlimits_{i = 0}^{m-1} (f_{w,b}(x^{(i)}) – y^{(i)})^2
为什么咱们的损失函数定义成这样?
- 首先,在这一大坨里面,十分好理解的部分是:fw,b(x(i))−y(i)f_{w,b}(x^{(i)}) – y^{(i)},就是第i个样本的预测值减去目标值(实际值),也就是损失的量。
- 为什么要平方呢?在这里,损失量可以说是一个标量,且得是一个正值。如果当预测值比目标值小,那么损失值就变成负数了,这不是我们机器学习体系所能理解的损失,反正,就不对了,因为损失得是一个量,跟正负没关系,所以要剔除正负号的影响。
- 求和部分很好理解,就是把所有样本的损失值加起来;除以m很好理解,因为咱们损失函数求整个模型的平均损失时,第一来的小,第二来的客观。
- 除以二的原因也很好理解。假设你初始的模型离理想的模型确实相差甚远,那么也就是说损失函数算出来的值很大。你可以在脑海里浮现y=x2y=x^2的图像了。假设我们初始的参数使损失函数在一定程度上远离最低点的点上,我们要使我们到达最低点,也就是要让我们函数点的导数等于0对不对?那我们就需要用到求导了。现在你知道为什么除以2了吗?没错,就说是为了求导时跟平方抵消。
上一章末:我们是用梯度下降的方法降低损失,从而训练出线性回归模型。
梯度下降(Gradient Descent)
梯度下降分为两个步骤:对两个参数求偏导数;梯度减少两个参数的值。对于线性回归模型,直到两个偏导数无限接近0。
求导过程……你应该学会自己求“复合函数”的导数了,知道这里x(i),y(i)x^{(i)},y^{(i)}变成常数也就是会求偏导数了。
两个偏导数分别是:
-
对参数w:∂J∂w=1m∑i=0m−1(fw,b(x(i))−y(i))x(i)frac{partial J}{partial w}=frac{1}{m}sumlimits_{i = 0}^{m-1}(f_{w,b}(x^{(i)}) – y^{(i)})x^{(i)}
-
对参数b:∂J∂b=1m∑i=0m−1(fw,b(x(i))−y(i))frac{partial J}{partial b}=frac{1}{m}sumlimits_{i = 0}^{m-1}(f_{w,b}(x^{(i)}) – y^{(i)})
梯度减少两个参数的方法:
-
对参数w:w=w−α∂J∂ww=w-alphafrac{partial J}{partial w}
-
对参数b:b=b−α∂J∂bb=b-alphafrac{partial J}{partial b}
αalpha是我们设置的learning rate,可以理解为你在函数高处梯度下山的步伐(梯度)的大小,不能太大,否则会使我们可能会错过最低点,却再也回不去(此时你每次更新参数后的损失会时大时小,也就是出现bug了),也不能太小,否则我们到达最低点所需时间会很长。
“In machine learning and statistics, the learning rate αalpha is a tuning parameter in an optimization algorithm that determines the step size at each iteration while moving toward a minimum of a loss function.”
那么我们要怎么知道合适的learning rate呢?
多试几个吧,合理范围内选最大的,最快(到达极限)的。
逻辑回归模型(Logistic Regression Model)
逻辑回归模型也是有监督地机器学习(Supervised Learning)的一种,它实现的功能就是分类,回归逻辑值,比如0/1,0表示否定,1表示肯定,反之亦可。
逻辑回归模型的learning algorithm:
g(z)=11+e(−z)g(z)=frac{1}{1+e^{(-z)}}
z=wx+bz=wx+b
这个函数就是我们的sogmoid function了。不难看出,当z很大时,函数g接近1,当z很小时,函数g接近0。
“For binary classification problems, a chosen method makes predictions that match the label scheme. Direct prediction is what we call the output of a method when its co-domain matches label values directly. Perceptrons make direct predictions because they output to either 0 or 1 for any point, which are taken as actual label values.”
一般对于返回值为0或1的分类工作就会用sigmoid function。但是,我们看到函数会发现,它有处于0~1之间的部分,我们使大于0.5的判断为1,反之则判断为0,此时它的输出就只有0和1了。
逻辑回归模型的Loss函数
-
fw,b(x(i))=sigmoid(wx(i)+b)f_{w,b}(x^{(i)}) = sigmoid(wx^{(i)} + b )
-
loss(fw,b(x(i)),y(i))=−log(fw,b(x(i))),if y(i)=1loss(f_{mathbf{w},b}(mathbf{x}^{(i)}), y^{(i)}) =-log(f_{mathbf{w},b}( mathbf{x}^{(i)})) ,text{if $y^{(i)}=1$}
-
loss(fw,b(x(i)),y(i))=−log(1−fw,b(x(i))),if y(i)=0loss(f_{mathbf{w},b}(mathbf{x}^{(i)}), y^{(i)}) =-log(1 – f_{mathbf{w},b}( mathbf{x}^{(i)})) ,text{if $y^{(i)}=0$}
合并改进后如下
loss(fw,b(x(i)),y(i))=−y(i)log(fw,b(x(i)))−(1−y(i))log(1−fw,b(x(i)))loss(f_{mathbf{w},b}(mathbf{x}^{(i)}), y^{(i)}) = -y^{(i)} logleft(f_{mathbf{w},b}left( mathbf{x}^{(i)} right) right) – left( 1 – y^{(i)}right) log left( 1 – f_{mathbf{w},b}left( mathbf{x}^{(i)} right) right)
(图片里的hθ(x)h_{theta}(x)就是fw,b(x(i))f_{w,b}(x^{(i)})。)
-
当y=1y=1时,fw,b(x(i))f_{w,b}(x^{(i)})的值越接近0,loss趋于无穷大,因为y=−log(x)y=-log(x)在0~1之间是减函数,即−log(fw,b(x(i)))-log(f_{mathbf{w},b}( mathbf{x}^{(i)}))为减函数。
-
当y=0y=0时,fw,b(x(i))f_{w,b}(x^{(i)})的值越接近1,loss趋于无穷大,因为y=−log(1−x)y=-log(1-x)在0~1之间是增函数,即−log(1−fw,b(x(i)))-log(1-f_{mathbf{w},b}( mathbf{x}^{(i)}))为增函数。
逻辑回归模型的梯度下降
因为仍然更新的是参数w,b的值,从而更新fw,b(x(i))f_{w,b}(x^{(i)})的值,所以我们仍然用cost function来做逻辑回归模型的梯度下降:
J(w,b)=12m∑i=0m−1(fw,b(x(i))−y(i))2J(w,b) = frac{1}{2m} sumlimits_{i = 0}^{m-1} (f_{w,b}(x^{(i)}) – y^{(i)})^2
不同的是,fw,b(x(i))f_{w,b}(x^{(i)})是sigmoid函数。其余全部照搬前文更新w,b的值,直到loss函数趋于0。
总结
懂了就好。