1. 感知机
要理解神经网络,首先我们先来理解感知机。感知机是一个简单的算法,给定n维向量x (x1, x2, ..., xn)
作为输入,通常称作输入特征或简单特征,输出为0或者1。
数学上我们定义以下函数:
当 wx + b > 0 时,f(x)=1
当 wx + b < 0 时,f(x)=0
这里,w
是权重向量,w·x
是向量w
和x
的点积,b
是偏差。事实上wx + b
定义了一个边界超平面,你可以设置w和b的值来改变它的位置。如果所给的点(x
)在超平面(直线)之上,则结果为正,否则结果为负。但是感知机只能表示确定答案而不能表示非确定性答案。下面有一个动图可以帮助理解感知机。
如果我们知道w
和b
就能回答1或者0,寻找w
和b
的过程就是神经网络的训练过程
2. 模型
Keras的原始构造模块是模型(model),模型有很多,其中最简单的模型被称为序贯(Sequential)模型。
Sequential模型是多个神经网络层的线性堆叠,也就是“一条路走到黑”。
- 可以通过向Sequential模型传递一个layer的list来构造该模型
from keras.models import Sequential
from keras.layers import Dense, Activation
model= Sequential([
Dense(32, units=784),
Activation('relu'),
Dense(10),
Activation('softmax'),
- 也可以通过.add()方法一个个的将layer加入模型中
model = Sequential()
model.add(Dense(32, input_shape=(784,)))
model.add(Activation('relu'))
3. 神经网络层(Layer)与多层感知机
神经网络中有许多的层,你可以向你的模型中加入各种各样的层,这里仅介绍神经网络中最简单的Dense层(全连接层)
“全连接”表示上一层的每一个神经元,都和下一层的每一个神经元是相互连接的。这里,每一层神经元就是上一节所说的感知机。可以由下面的图帮助理解。
多层神经网络构成了多层感知机
4. 激活函数
4.1 感知机训练方案中存在的问题
当没有神经网络的时候,神经元对数据的处理就是基于权重和偏移做线性变换。线性变换很简单,但是限制了对复杂任务的处理能力。没有激活函数的神经网络就是一个线性回归模型。
感知机不能表现出“一点一点”的渐进学习行为,它是突变的,它的结果只有0和1。如果我们需要得到一个0到1之间的值,感知机就不能胜任了。
于是我们需要一个更平滑的东西,一个从0到1逐渐变化不间断(连续可导)的函数。这就是激活函数。激活函数做的非线性变换可以使得神经网络处理非常复杂的任务。
4.2 激活函数——sigmoid
sigmoid函数的定义如下:
将
z = wx + b
作为sigmoid函数的输入,如果z = wx + b
是非常大的正值,那么sigmoid函数趋于1,如果z = wx + b
是非常大的负值,那么sigmoid函数趋于0。这和感知机具有类似的行为,但它的变化是渐进的,这正是我们想要的。
4.3 softmax——sigmoid函数的拓展
softmax把一些输入映射为0-1之间的实数,并且归一化保证和为1,因此多分类的概率之和也刚好为1。
softmax 与 k个二元分类器 的区别:
如果你在开发一个音乐分类的应用,需要对k种类型的音乐进行识别,那么是选择使用 softmax 分类器呢,还是使用 logistic 回归算法建立 k 个独立的二元分类器呢?
这一选择取决于你的类别之间是否互斥,例如,如果你有四个类别的音乐,分别为:古典音乐、乡村音乐、摇滚乐和爵士乐,那么你可以假设每个训练样本只会被打上一个标签(即:一首歌只能属于这四种音乐类型的其中一种),此时你应该使用类别数 k = 4 的softmax回归。(如果在你的数据集中,有的歌曲不属于以上四类的其中任何一类,那么你可以添加一个“其他类”,并将类别数 k 设为5。)
如果你的四个类别如下:人声音乐、舞曲、影视原声、流行歌曲,那么这些类别之间并不是互斥的。例如:一首歌曲可以来源于影视原声,同时也包含人声 。这种情况下,使用4个二分类的 logistic 回归分类器更为合适。这样,对于每个新的音乐作品 ,我们的算法可以分别判断它是否属于各个类别。