机器学习笔记——神经网络的实现

0x00 前言

这篇算是神经网络学习的一篇实现总结,神经网络算法无疑是最好的实现人类“人工智能”的算法,与安全相关的是,神经网络已经在WAF领域、SQL注入检测、Webshell检测领域有了方法论,为了最终能和安全技术相结合,首先要搞清楚这个算法的整个过程。
这里不会详细的从各个层面总结神经网络算法,而是通过实现的代码来学习,我想这个方法无疑是学习任何机器学习模型的最好方法。

0x01 训练的步骤

这里的训练步骤是使用了吴恩达博士的slide,有兴趣的可以去Coursera上听一听。
(1)随机初始化每层的theta参数矩阵
(2)对每一个xj,通过前向传导算法(FP)获取hθ(x(i))
(3)计算Cost Function,J(θ)
其中J(θ)的表达式为:

(4)使用反向传播算法(BP)计算ϑϑΘ(l)jkJ(Θ)
(5)使用梯度检测比较BP得出的梯度和数值计算出来的梯度是否基本相同
(6)在反向传播算法的基础上使用梯度下降和其他优化算法最小化J(θ)

0x02 FP算法步骤

FP算法如下,用来从第一层开始,逐步向后传导,最终求出最后一层即输出层(output layer)的输出函数:

训练集为5000个,其中有400个维度(不算偏置单元的theta),Octave实现如下:

可以看到FP算法就是一层一层从前向后逐步求出output layer的值。

0x03 BP算法步骤

在求每层单元误差的时候,必须使用后向传播算法,步骤如下,同样来自于吴恩达博士的slide:

对于每个训练集样本,我们都要执行一次BP算法来计算对应的Delta的值。
关于delta的计算,首先要算出输出层的delta,然后后向传播:

后向传播的初始化就是输出层的误差delta,在上面一张slide上也能很清楚的看到传播的计算过程。
具体实现如下:

0x04 总结

神经网络算是一个比较复杂的机器学习算法了,复杂的好处在于运用这种算法,可以轻松解决一些维数很多的样本集进行学习。比如谷歌一直研发的自动驾驶技术、百度brain等一些机器学习项目,基本都是基于神经网络来进行实现。所以,使用神经网络来解决安全问题,似乎有点儿杀鸡用牛刀的意思。

[via@ExploitCat-91Ri团队]