当特征太多,多项式特征会更多,无论是线性回归还是逻辑回归,计算的负荷会非常大,所以需要引入神经网络。
神经网络模型
神经网络模型表示
若将第一层去掉,该模型就是一个逻辑回归模型。与逻辑回归相比,神经网络的优势就在于将输入的特征X复合成更高级的可变的特征值,所以能更好预测新数据。
直观理解模型
神经网络中,单层神经元的计算可用来表示逻辑运算,比如逻辑与(AND)、逻辑或(OR)、非(NOT)。
之后,可以利用神经元来组合成更复杂的神经网络实现更复杂的运算。例如同或(XNOR) 功能。
XNOR = (x1 AND x2) OR [(NOT x1) AND (NOT x2)] = ①OR ②
先构造②部分 [(NOT x1) AND (NOT x2)]
然后将AND和②拼起来,再和OR组合起来:
其真值表如下所示:
按这种方法我们可以逐渐构造出越来越复杂的函数,也能得到更加厉害的特征值。
神经网络学习
代价函数
BP算法公式
为了计算代价函数的偏导数,首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。用链式求导法则对代价函数求偏导,和计算偏导数公式如下:
其中:
一般的有规律:
例子:
BP算法整体步骤(带正则化)
梯度检验
用于检验BP算法得到的偏导是否有误。
随机初始化
初始参数theta值能否为zeros(n,1) ?
不能全为0值或者一样的初始值,这样会阻止神经网络学习到更多的参数。因为下一层会得到相同的加权和,激活函数也相同,更更下一层也会如此。此外,由BP算法得到的偏导数也会重复。
可以将theta初始化成在0附近的值:
eps是很小的数:
总结
- 第一件要做的事是选择网络结构,即决定选择多少层以及决定每层分别有多少个单元。第一层的单元数即我们训练集的特征数量。最后一层的单元数是我们训练集的结果的类的数量。如果隐藏层数大于 1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。我们真正要决定的是隐藏层的层数和每个中间层的单元数。
- 训练神经网络:
a.参数的随机初始化
b.利用前向传播方法计算所有的ℎ𝜃(𝑥)
c. 编写计算代价函数 𝐽 的代码
d.利用反向传播方法计算所有偏导数
e.利用梯度检验方法检验这些偏导数(程序中只检验一次,计算量大)
f. 使用更高级优化算法来最小化代价函数找到最优的theta