美文网首页
深度学习(一)Logistic Regression 浅析

深度学习(一)Logistic Regression 浅析

作者: Polaris_SDU | 来源:发表于2018-01-03 11:22 被阅读0次

    我们知道其实 “深度学习” 是深层神经网络的重新包装,得益于GPU和大规模数据集的出现以及近几年算法的创新,神经网络重新焕发了生机。logistic regression 分类器可以看成一个单隐层的神经网络,若干个logistic regression单元有规律的组合就能形成可以处理复杂任务的深层神经网络,因此探讨logistic regression 的运行机制对于我们理解深层神经网络有很大的好处。

    1-1(A simple logistic regression unit)

    目前神经网络的计算主要分为2个方向:遍历样本进行前向传播产生预测值;计算成本进行反向传播更新参数值。

    (一)前向传播(forward propagation)

    1-2(常用符号定义)

    为了方便我们以后讨论问题,我们定义了如上符号。前向传播主要分为线性运算(z=w.T*x+b)和激活运算(a=g(z)),g指的是激活函数。我们常用的激活函数有: sigmoid,  tanh, softmax,relu。在深层神经网络中我们一般采用 relu+softmax或relu+tanh,关于它们的优缺点和应用场景可以参考:常用激活函数比较  。在logistic regression 中我们采用 sigmoid作为激活函数。

    (二)成本函数(cost function)

    1-3(loss function) 1-4(cost function)

    在对网络进行反向传播之前,我们首先需要对前向传播计算的输出值和样本的真实值之间的误差计算损失。loss function是在单个训练样本上定义的,它衡量了神经网络在单个训练样本上的表现;cost function是在全体样本上定义的, 它衡量的是神经网络在全体训练样本上的表现。

    (三)反向传播(back propagation)

    反向传播是神经网络进行训练和优化的重要环节,在训练集上利用优化算法最小化成本函数J(w,b)来得出最优的参数w.b。常见的优化算法有: GD, SGD, RMSprop, ADAM, Adadelta等等。优化算法的比较及代码实现  

    1-5(反向传播算法的向量形式)

    接着我们就可以进行n次梯度循环,一步步的达到最优值。下面我们将以吴恩达教授的猫脸识别为例详解logistic regression 的代码实现。

    (四)代码实现

    1-1  sigmoid  

         sigmoid 用于神经网络的输出层,它可以将一个实数映射到(0,1)的区间,可以用来做二分类

    1-6 (sigmoid 图像)

     1-2  代码实现:

    1-7 (sigmoid代码实现)

    2-1  参数初始化

    当你训练神经网络的时候,随机初始化权重(W)非常重要。对于有多个隐藏单元的神经网络,如果将权重参数全部初始化为0,再进行梯度下降是完全无效的,因为所有的隐藏单元都是对称的,不管你运行多长时间的梯度下降,它们都是在计算完全一样的函数,因此在多层神经网络中,不能将权重初始化为0,由于logistic regression只有一个隐藏单元,可以将权重初始化为0。对于偏置b 我们可以统一初始化为0。

    2-2  代码实现

    1-8(初始化参数代码实现)

    3-1  梯度循环

    梯度循环分为2部分:首先进行前向传播计算成本值;进行反向传播计算梯度值更新参数。

    3-2  代码实现

    1-9(梯度循环代码实现)

    4-1  训练优化

    我们可以自己尝试设置学习率,梯度循环次数。进行多次训练求得最优的w,b 并且缓存w,b 作为预测模型的最终参数,预测其它的照片。

    4-2  代码实现

    1-10(训练优化代码)

    5-1  产生预测模型

    经过多次的训练优化,我们就能得到使 cost function 最小的w,b(最优解),下面我们就可以用从训练集上学到的最优的w,b 对测试集的照片进行预测。

    5-2  代码实现

    1-11(预测模型代码实现)

    6-1  logistic regression 函数

    我们已经实现了logistic regression 所需的所有子函数,现在我们就可以把它们组合起来形成完整的logistic regression 网络。

    6-2  代码实现

    1-12(logistic regression model)

    7-1  All to all

    我们可以随意设置学习率和梯度下降循环次数,观察神经网络的运行结果,为了方便查看可以使用matplotlib 库绘制cost 曲线。我设置了3个不同的学习率分别为0.018,0.012,0.006,循环次数为2000次,最后用三张照片测试算法的性能。

    7-2  代码及性能展示

    1-13(测试代码) 1-14(learning_rate=0.006时的成本值) 1-15( learning_rate=0.006时的cost曲线 ) 1-16(识别正确) 1-17(识别正确) 1-18(识别错误)

    8 总结

    通过以上例程,我们明白了logistic regression 运行机制。我们观察到算法在测试集上的识别正确率约为68%,在训练集上识别正确率约为100%,即存在较大的偏差和方差。为了提高测试集识别正确率我们可以增加训练集的图片数目或者采用更深层的神经网络。我们以后会用4层的神经网络来识别猫脸,你会发现测试集的识别正确率能达到82%。完整的程序及训练数据集可以访问我的 github

    9  引用

    吴恩达教授在网易上的公开课(deep learning):http://study.163.com/my#/smarts

    李飞飞教授(cs231n):http://study.163.com/course/courseMain.htm?courseId=1003223001

    进击的加菲猫:https://www.aiboy.pub/2017/09/10/A_Brief_Of_Optimization_Algorithms/#more

    不会停的蜗牛:https://www.jianshu.com/p/22d9720dbf1a

    相关文章

      网友评论

          本文标题:深度学习(一)Logistic Regression 浅析

          本文链接:https://www.haomeiwen.com/subject/rpmtnxtx.html