深度学习基础 - 基于Theano-MLP的手写字符识别实验
本文的完整代码托管在我的Github PY131/Practice-of-Machine-Learning,欢迎访问。
基础知识
深度学习回顾
深度学习的概念起源于人工神经网络,本文所采用的包含多隐层的多层感知机(MLP)就是其中的典型模型。长期以来,由模型复杂度所带来的计算效率低下问题一直是抑制深度学习进一步发展的瓶颈。近年来,随着大数据、云计算的兴起以及进步的算法设计,以“深度学习”为代表的大容量复杂模型开始突破其效率瓶颈,走向实用。深度学习正被愈发广泛地应用于计算机视觉、语音识别、自然语言处理等领域,其所具备的强大学习能力已初现威力。
Theano简介
Theano是一个基于python的科学计算框架,它在集成了numpy/scipy的基础上,实现了对GPU的透明支持,theano常被用作深度学习的基础框架。下面回顾theano的几个基础概念(核心概念):
- tensor variable(张量)
- theano function(theano函数)
- shared variable(共享变量)
- gradient(梯度)
基于MLP的字符识别模型
这里我们采用简单的单隐层MLP来实现,具体过程可参考:MNIST_Multilayer Perceptron。
这里列出一些建模过程中所要注意的内容:
- 参数(连接权+偏置)的初始化区间需根据激活函数而定;
- 此处面向分类问题,输出层可采用softmax来获得最终预测结果;
- 采用MSGD(块随机梯度下降)来加速寻优,注意mini-batch的size选取;
- 采用L1/L2正则化提升模型泛化能力,注意正则化参数的调节;
- …
实验内容
数据集分析
这里我采用规约好的MNIST数据集,相关内容可参考:Getting Started - Datasets - MNIST Dataset,数据集(mnist.pkl.gz)相关统计内容如下:
- 维度属性:
数据集包含3个子数据集,对应train_set、valid_set、test_set,样本规模分别为5