theano-windows学习笔记十——多层感知机手写数字分类

Posted 风翼冰舟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了theano-windows学习笔记十——多层感知机手写数字分类相关的知识,希望对你有一定的参考价值。

前言

上一篇学习了softmax, 然后更进一步就是学习一下基本的多层感知机(MLP)了. 其实多层感知机同时就是w*x+b用某个激活函数激活一下, 得到的结果作为下一层神经元的输入x, 类似于

output=f3(f2(f1(xw1+b2)w2+b2)w3+b3)
如果用感知器分类, 那么通常的做法是在最后接一个 softmax, 如果是回归或者拟合, 这个额, 回头用到了再说. 如果以 sigmoid作为激活函数, 那么每层单元的计算方法就是
yi=11+ewixbi1i<n1ewn1jyn1+bjtotalneuralj=1ewn1jyn1+bj
国际惯例,参考网址:

Multilayer Perceptron

预备知识

超参数

这些参数无法通过梯度下降算法优化, 严格点说就是为这些参数寻找最优值是不可行问题, 我们无法单独对每个参数进行优化, 在这, 我们无法使用之前介绍的梯度方法(因为一些参数是离散值, 其它的是实值), 最后就是优化问题是非凸的,找到(局部)极小值可能需要费很大劲.(笔者注:说了这么多, 其实那些神经元个数啊, 学习率啊,诸如此类的都属于超参)

非线性函数

其实就是激活函数, 截止到目前, 已经出现过好多激活函数了, 详细可以去看caffe的官方文档都有哪些. 早期主要使用sigmoidtanh, 其实它俩可以互相变换得到

12sigmoid(x)=tanh(x2)
详细区别可以戳 《在神经网络中,激活函数sigmoid和tanh除了阈值取值外有什么不同吗?》

权重初始化

一定不能把权重初始化为0, 因为全0的话所有的输出就一样了, 影响不同神经元上梯度的多样性. 初始化权重的时候, 我们希望能够让它尽量接近0, 这样梯度就在激活函数的接近线性区域的部分(比如sigmoidtanh在原点附近很接近y=x), 这时候梯度是最大的. 还有就是尤其对于深度神经网络, 会保存激活的反差以及层与层之间的梯度, 这允许神经网络中上行和下行过程正常流动, 并且降低层与层之间的差异性. 我们一般会遵循一个称为fan-in and fan-out的准则, 具体论文Understanding the difficulty of training deep feedforward neuralnetworks, 就是权重从如下分布中均匀采样:

uniform[6fanin+fanout,6fanin+fanout]fortanhuniform[46fanin+fanout,46机器学习笔记:多层感知机的一致逼近性

Pytorch学习笔记——多层感知机的实现

十卷积神经网络知识和二维卷积层计算(3.7学习笔记)

学习笔记TF026:多层感知机

深度学习笔记——从多层感知机模型(MLP)到人工神经网络模型(ANN)

theano-windows学习笔记二十——LSTM理论及实现