多层感知机(MLP)
本文章基于3Blue1Brown视频并且结合自己学习总结的笔记视频链接:
https://www.youtube.com/watch?v=aircAruvnKk本文只能帮你快速建立对知识理解,如果想
细入了解知识——自己查阅文献以及书籍自己也在学习深度学习(花书),会不断更新此文章,尽可能的让这篇文章完美
可以访问我的个人博客:https://shangxiaaabb.github.io/
引入
以手写字体识别为例,我们人类可以很容易对一个手写字体进行识别比如下图:
我们可以十分自信的说:这个数字是3!但是对于计算机并非如此!计算机并没有如同人类一样的视觉细胞,那么怎么让计算机认识这数字呢?我们在K近邻算法中有一个手写字体识别实验,我们是直接将数字进行2值化
将数字转化为0-1,如下图:
然后将32×32的图像直接转化为1×1024,而后利用K近邻算法进行判别。这不妨是一个很好的办法,另外一种更加直接的办法就是将数字转化为不同的灰度值矩阵,如下:
我们后续介绍多层感知机也是灰度值变换后图像进行判别。
什么是多层感知机
在介绍多层感知机前(不解释定义之类的,都可以自行百度),我们先了解单层神经网络的基本结构,单层神经网络一般由:输入层、输出层构成。如下:
先暂时不解释各个层的作用,我们继续介绍多层感知机:
对比两图最明显的区别就是多层感知机相较于单层神经网络额外的多了一个隐藏层。是不是该解释一下1每一层的作用了呢?不!(直接对概念下定义是很难理解的)我们借助我们引入的例子来对没一层进行解释。我们设计一个多层感知机模型如下(为什么这样设计后续解释,从左至右:输入层(784)–>隐藏层(n)–>隐藏层(n)–>输出层(10)):
-
括号里面数字代表层的数目
引入中我们已经提到手写数字已经被我们转化为一个28×28的灰度值矩阵,下面开始解释每一层都在干些什么事情!
输入层
我们知道数字已经转化为了一个28×28的灰度值矩阵,我们类似K近邻算法将其再次转为为1×784的矩阵,我们将矩阵中的每一个数字(灰度值)作为我们的神经元,也就是说我们拥有784个神经元(也就解释了为什么要设计输入层的数目为784)。
输出层
我们知道阿拉伯数字只有0-9(别抬杠说10,难道不是由0-1构成),那么是不是我们数据在经过处理之后返回的结果也应该是0-9,这0-9也就构成了我们的输出层(也就解释了输出层为什么是10)
隐藏层
至于隐藏层为什么设计两层,而且每层的数目是n。其实很容易解释,首先你不妨在纸上写任意几个数字(假如你写的是数字9),手写数字9是不是大体上可以分为两部分:9的头部的圆、9的尾部的竖线。依次类推任意数字我们都可以才分成几个部分组成(尽管由相似但是不影响我们对数字识别)。好啦假设我们已经对数字划分完毕,已经划分若干组成成分——我们也就构成了我们第二层隐藏层,依次类推是不是还可以继续细分呢?9的头部的圆(o)是不是可以细分其他样式呢?——第一层隐藏层。
解释完各个层都在干嘛,你也没解释我们怎么识别数字呀!别急!接下来就解释!我们假设我们在第二层隐藏层得到了一个圈和一个竖线通过组合是不是可以得到数字9?为什么不是数字6呢?我们假设第二次隐藏层的数目是$a_1…..a_n(每一个a_i代表不同数字组成部分)$,细心的你肯定已经发现了不同层之间有着许多线进行连接,他们是干嘛的呢?权重,正是因为这些权重才能保证我们可以识别数字是9而不是6。以此类推第一场隐藏层也如此!
以上都是一些口语化解释并没有涉及过多的专业名词,下面开始解释一些理论上的内容!
激活函数
激活函数判别来确定神经元是否应该被激活,常见三类激活函数如下:
sigmoid函数
$$
sigmoid(x)=frac{1}{1+exp(-z)}
$$
$$
z=w_1a_1……w_na_n+b_0
$$
$b_0$代表偏置,用于判别激活函数为多少情况下神经元是否被激活
函数图像如下:
Relu函数
$$
Relu(z)=max(x,0)
$$
函数图像如下:
所有小于0的数字都处理为0
tanh函数
$$
tanh(z)=frac{1+exp(-2z)}{1+exp(-2z)}
$$
函数图像如下:
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net