机器学习:寻找一组最优函数映射

监督学习(supervised learning):模型输入和输出已知,要选择合适的模型模拟输入和输出的函数关系

机器学习的步骤:
1 选择合适网络结构
2 选择训练方法,评估网络性能
3 选择表现最好的参数

DNN(深度学习)
1 神经元(neuron):构成神经网络的节点。接受输入,进行对应函数运算(激活),向后传递输出

2 权重(weight):节点输出对后面神经元影响,权重越大影响越大。影响可能为正为负
模型训练就在于寻找合适权重

3 偏置量(bias):对加权数据的校正值

4 激活函数(activation function):通过特定函数将求解输入得到输出,一般实现非线性变化。激活函数会激活信息量大的输入,抑制信息量不足的输出

常用激活函数:
1 sigmoid
f(z) = 1 / (1 + e^-z)
这一函数定义域为全体实数,值域为(0, 1),关于(0, 0.5)中心对称。由于可以把任意实数映射到(0, 1)区间,可用于二分类

2 ReLU
f(z) = z (z > 0)
f(z) = 0 (z <= 0)

5 前向传递(feedforward NN)
每一层输入端每个数据乘上对于权重,再加上偏置量,进入神经元。神经元通过激活函数计算并输出结果,成为下一层输入,直至得到最终输出

完全连接:
加权边数量:输入节点量 * 本层节点量
偏置量数量:本层节点量

在程序实现中用python里vector(即矩阵)数据类型存储节点输入输出。矩阵计算可以利用GPU加速

在神经网络最后一层要对之前的数据进行归一,因此需要softmax激活函数:

该函数有两个作用:
1 把负数值通过e^ak变为正数
2 利用指数加大数据差

深度学习就是神经网络隐藏层数加深,在隐藏层中对特征进行提取,但具体提取过程现在仍未知。

增加层数可以增加非线性级别,要找到合适的层数和每一层神经元数量要靠实验调试

训练神经网络:BP反向传递

1 独热矢量(one-hot vector):样本本身人为打的标签,这里相当于对样本分类,某一样本在这一类概率为1,其他概率为0,标签矩阵维数代表分类数量

2 通过比对神经网络判定概率和独热矢量差可以评判神经网络准确性。

3 对于每一个样本计算神经网络预测值和实际标签值的差,进行加和,得到总损失(total loss)L

4 损失函数(loss function)用来评判L的大小,有两个常用方法:
1 1/2均方差
2 交叉熵

交叉熵算法来源于信息熵的概念。信息熵为信息量的量度,对于事件x的信息熵为 -log(p(x)),x发生概率越小,信息熵越大,信息量越大。在交叉熵计算中,预测概率越大说明预测越准确,因此信息熵要尽可能小

梯度下降(gradient descent)
损失函数本质还是L关于w和b的函数

梯度下降求损失函数最小值。使用的方法即为通过求导来找函数最小值。
如果在这一点导数小于0,增加权重
如果在这一点导数大于0,减小权重

可以用以下公式表示:

这里α叫做学习率(learning rate),代表每一次迭代的速度
α的合理取值要实验获得,取值过大可能会导致跨过最小值,取值过小又会降低学习速度

梯度下降:
梯度下降的具体实现原理和求函数极值相同,但是由于损失函数有多个参数(w和b),要求偏导

偏导即为一函数对于多个参数求导,在对每一个参数求导时把其他参数看为常数。
例:y = w² + wb + 3b
∂y/∂w = 2w + b
∂y/∂b = w + 3

梯度为函数中上升最快的值,因为我们要函数值下降最快,所以称为梯度下降