theano-windows学习笔记十——多层感知机手写数字分类
Posted 风翼冰舟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了theano-windows学习笔记十——多层感知机手写数字分类相关的知识,希望对你有一定的参考价值。
前言
上一篇学习了softmax
, 然后更进一步就是学习一下基本的多层感知机(MLP)了. 其实多层感知机同时就是w*x+b
用某个激活函数激活一下, 得到的结果作为下一层神经元的输入x
, 类似于
如果用感知器分类, 那么通常的做法是在最后接一个
softmax
, 如果是回归或者拟合, 这个额, 回头用到了再说. 如果以
sigmoid
作为激活函数, 那么每层单元的计算方法就是
yi=⎧⎩⎨⎪⎪⎪⎪11+e−wi∗x−bi1≤i<n−1ewn−1j∗yn−1+bj∑totalneuralj=1ewn−1j∗yn−1+bj
国际惯例,参考网址:
预备知识
超参数
这些参数无法通过梯度下降算法优化, 严格点说就是为这些参数寻找最优值是不可行问题, 我们无法单独对每个参数进行优化, 在这, 我们无法使用之前介绍的梯度方法(因为一些参数是离散值, 其它的是实值), 最后就是优化问题是非凸的,找到(局部)极小值可能需要费很大劲.(笔者注:说了这么多, 其实那些神经元个数啊, 学习率啊,诸如此类的都属于超参)
非线性函数
其实就是激活函数, 截止到目前, 已经出现过好多激活函数了, 详细可以去看caffe的官方文档都有哪些. 早期主要使用sigmoid
和tanh
, 其实它俩可以互相变换得到
详细区别可以戳 《在神经网络中,激活函数sigmoid和tanh除了阈值取值外有什么不同吗?》
权重初始化
一定不能把权重初始化为0, 因为全0的话所有的输出就一样了, 影响不同神经元上梯度的多样性. 初始化权重的时候, 我们希望能够让它尽量接近0, 这样梯度就在激活函数的接近线性区域的部分(比如sigmoid
和tanh
在原点附近很接近y=x
), 这时候梯度是最大的. 还有就是尤其对于深度神经网络, 会保存激活的反差以及层与层之间的梯度, 这允许神经网络中上行和下行过程正常流动, 并且降低层与层之间的差异性. 我们一般会遵循一个称为fan-in and fan-out
的准则, 具体论文Understanding the difficulty of training deep feedforward neuralnetworks, 就是权重从如下分布中均匀采样: