Bootstrap

简单的神经网络例子

   我们说神经网络是个黑盒子,它有输入或者输出,那这里面是什么?我们以只有一个神经元的网络为例。
   当只有一个神经元时,它的输入只能是一个数字,这里先不要问为什么,你暂时只要知道这个神经元的输入只能是一个数字,这个数字来自于我们对某个事物在数学上的抽象,它作为一个数字输入到神经元,在神经元中我们会进行一个计算处理,然后得到另外一个数字,如下图:
在这里插入图片描述
   弄个不恰当的假设,假设我们要做的任务就是根据人的体重来判断这个人的胖瘦的可能性,这里的事物属性就是人的体重,为什么是 0.4 ?你可以理解为你的数据里人的体重范围是 50kg-100kg,刚好输入数据人的体重是 70kg,输入的数据经过(70-50)/100 的归一化后得到了 0.4,同理如果人的体重是 80kg,那就是 (80-50)/100 = 0.6,为什么要归一化?你的问题很多,但很好,简单回答就是为了神经网络训练时候的更快更容易收敛,具体请学习神经网络的内容!
   讲完事物属性,还有个就是神经元的计算,这里的计算一般来说又可以细分为 2 个步骤:

设事物属性值为 x,神经元必定有一个 "训练参数 w",一个偏置参数 "b",
以及一个激活函数 func_act,
第一个步骤:output_tmp = w*x+b
第二个步骤:输出(output) = func_act(output_tmp) 

解释:输入的事物参数和神经元的权重参数(训练参数)相乘,加上偏置项 b,得到初步的输出(output_tmp),再根据这个输出经过激活函数,得到最终的结果 0.9。激活函数是什么?就是一个函数,它会将上一步的输出经过这个函数转换,得到一个新的值,通常这个转换是非线性的变换,常见的激活函数有 sigmoid, tanh, relu, leaky-relu, gelu 等等,请自行查阅。
   以上就是神经网络的基本形式,在实际的深度学习或浅层神经网络中无非是多了很多个神经元,输入的事物属性维度也是更多的,本质上输入就是从一个值变成了一列、一个方阵、多个方阵,神经元个数多之后也是一个值变成了一列、一个方阵、多个方阵,形式上只是从一个值的计算变成了矩阵和矩阵的计算,本质上仍旧是图中的内容,这是最简单的理解。


为什么神经网络训练后能够进行预测?

   人工智能,说到底是数学家、科学家们较为完美地利用数学和生物学科进行高级的融合,接下来会讲述一个数学例子来表明为什么神经网络能够在训练后能够对一些数据进行预测或实际作用。
   首先得知道神经网络训练时的一个关键公式——梯度下降公式,这个公式能够帮助你在初学时提高对神经网络的理解:
在这里插入图片描述
解释:w 为神经元参数,w’ 为这次训练后更新的值,a 为学习率,你可以理解为一个控制训练速度或稳定性的值,一般初始为 1e-3(0.001)或其他值,y 表示对于输入 x 我们期望的正确值,这是个已知值,y_pred 是这次训练迭代预测出的值,这个值可能是错的。
   L’ 是损失函数对 w 的一阶导数,损失函数即衡量某次预测值和实际值差距的函数,它的形式有多种,最基础的有 L1 损失函数 ==》|y-y_pred|,L2损失函数 ==》(y-y_pred)2,比如 L2 损失函数对 w 的一阶导数为:
在这里插入图片描述
权重参数 w 在经过一次更新后就能让下次的结果更接近真实值,下面的以输入 3,权重参数为 w,其初始值为5,期望输出的真实值为 11 ,学习率和一阶导乘积为 0.1,进行梯度下降训练:

def net(w): # 可以理解为这个网络只有一个神经元,0.2 为偏置
    return 3*w+0.2
y_t = 11
w_o = 5
w_tmp = w_o
while abs(net(w_tmp) - y_t) > 0.005:
    w_tmp = w_tmp - 0.1*(net(w_tmp)  - y_t)
    print(w_tmp)

以下为 w_tmp 每次训练迭代后的值:
4.58
4.2860000000000005
4.0802000000000005
3.9361400000000004
3.8352980000000003
3.7647086
3.7152960200000003
3.6807072140000003
3.6564950498
3.63954653486
3.627682574402
3.6193778020814
3.61356446145698
3.609495123019886
3.6066465861139205
3.6046526102797447
3.603256827195821
3.602279779037075
3.601595845325953

我们将最后的 3.601595845325953 带入神经元计算,惊喜地发现它的输出居然是 11.002,这和我们预期值 11 相当接近,因此经过训练的网络,下次遇到的输入值接近 3 时,肯定能够输出和 11 接近的数值,这就完成了预测,假设下次的值低于11,我们就说这个人可能是个瘦子,高于11就说这个人会相对肉多一些,注意,实际运用的神经网络的输出结果只是可能性而已,因为权重参数量较多,我们无法预测每个参数的最终值是哪个,也无法预测哪个参数起了决定性作用。以上就是简单的神经网络例子。

;