二分类
- 逻辑回归模型一般用来解决二分类(Binary Classification)问题
- 二分类就是输出y只有{0,1}两个离散值(也有{-1,1}的情况)。判断图片中是否有猫存在,0代表noncat,1代表cat。
logistic回归
-
逻辑回归的预测输出
写做: y ^ = S i g m o i d ( w T x + b ) = σ ( w T x + b ) \hat y=Sigmoid(w^Tx+b)=σ(w^Tx+b) y^=Sigmoid(wTx+b)=σ(wTx+b)
其中,Sigmoid函数通常被用在神经网络中当作激活函数(Activation function)使用。
通过Sigmoid函数,就能够将逻辑回归的输出限定在[0,1]之间了。
-
逻辑回归的成本函数:
我们把单个样本的成本函数(cost function)用损失函数(loss function)来表示:
L ( y ^ , y ) = − ( y l o g y ^ + ( 1 − y ) l o g ( 1 − y ^ ) ) L(\hat y,y)=-(ylog\hat y+(1-y)log(1-\hat y)) L(y^,y)=−(ylogy^+(1−y)log(1−y^))
梯度下降法
-
接下来将使用梯度下降(Gradient Descent)算法来计算出合适的w和b值,从而最小化m个训练样本的Cost function.
→回归函数为: J ( ω , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) J(\omega,b)=\frac{1}{m}\sum_{i=1}^mL(\hat y(i),y(i)) J(ω,b)=m1i=1∑mL(y^(i),y(i))
→梯度下降的过程如下图所示:
梯度下降算法每次迭代更新,w和b的修正表达式为:
ω = ω − α ∂ J ( ω , b ) ∂ ω \omega=\omega-\alpha\frac{ \partial J(\omega,b)}{\partial \omega} ω=ω−α∂ω∂J(ω,b)
b = b − α ∂ J ( ω , b ) ∂ b b=b-\alpha\frac{ \partial J(\omega,b)}{\partial b} b=b−α∂b∂J(ω,b)
导数
微积分略。
计算图
-
整个神经网络的训练过程实际上包含了两个过程:正向传播(Forward Propagation)和反向传播(Back Propagation)。
→正向传播是从输入到输出,由神经网络计算得到预测输出的过程
→反向传播是从输出到输入,对参数w和b计算梯度的过程
向量化
- 深度学习算法中,数据量很大,在程序中应该尽量减少使用for循环语句,而可以增加使用向量化矩阵运算来提高程序运行速度。(在python的numpy库中,我们通常使用np.dot()函数来进行矩阵运算。)
-
为了加快深度学习神经网络运算速度,可以使用比CPU运算能力更强大的GPU(图像处理单元)。
→GPU和CPU都有并行指令(parallelization instructions),称为Single Instruction Multiple Data(SIMD)。
→SIMD是单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集。SIMD能够大大提高程序运行速度,例如python的numpy库中的内建函数(built-in function)就是使用了SIMD指令。
Python中的广播
python中的广播机制可由下面四条表示:
- 让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐
- 输出数组的shape是输入数组shape的各个轴上的最大值
- 如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错
- 当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值
既python中可以对不同维度的矩阵进行四则混合运算,但至少保证有一个维度是相同的。
注意在python程序中为了保证矩阵运算正确,可以使用reshape()函数来对矩阵设定所需的维度。