学习心得:
神经网络原理仅仅是求导 偏导来进行传递信息,而现在要教会你的是如何在计算机中实现这一个过程,考试考的内容书上都有.
在学习方面你主要靠自己,不会就在网络上搜索与一般都会有答案,室友和别人不学习是他们的事,但无论如我们自身都必须丰富我们的知识。
学习的越多,我们就越知道我自身的所了解的东西之少,但与此同时即使我有时间却看不下去书,别人能考985
211是因为他们能够准确分配自己时间来学习。而且计算机内卷的厉害我们没有时间浪费了,至少出去的时候我们能拿出一门语言去工作,希望能够好好经历这一生。
1 神经元细胞的数学模型
神经网络如下图
输入 input
( x 1 , x 2 , x 3 ) (x_1,x_2,x_3) (x1,x2,x3) 是外界输入信号,一般是一个训练数据样本的多个属性,比如,我们要预测一套房子的价格,那么在房屋价格数据样本中, x 1 x_1 x1 可能代表了面积, x 2 x_2 x2 可能代表地理位置, x 3 x_3 x3 可能代表朝向。另外一个例子是, ( x 1 , x 2 , x 3 ) (x_1,x_2,x_3) (x1,x2,x3) 分别代表了(红,绿,蓝)三种颜色,而此神经元用于识别输入的信号是暖色还是冷色。
权重 weights
( w 1 , w 2 , w 3 ) (w_1,w_2,w_3) (w1,w2,w3) 是每个输入信号的权重值,以上面的 ( x 1 , x 2 , x 3 ) (x_1,x_2,x_3) (x1,x2,x3) 的例子来说, x 1 x_1 x1 的权重可能是 0.92 0.92 0.92, x 2 x_2 x2 的权重可能是 0.2 0.2 0.2, x 3 x_3 x3 的权重可能是 0.03 0.03 0.03。当然权重值相加之后可以不是 1 1 1。
偏移 bias
还有个 b b b 是怎么来的?一般的书或者博客上会告诉你那是因为 y = w x + b y=wx+b y=wx+b, b b b 是偏移值,使得直线能够沿 Y Y Y 轴上下移动。这是用结果来解释原因,并非 b b b 存在的真实原因。从生物学上解释,在脑神经细胞中,一定是输入信号的电平/电流大于某个临界值时,神经元细胞才会处于兴奋状态,这个 b b b 实际就是那个临界值。亦即当:
w 1 ⋅ x 1 + w 2 ⋅ x 2 + w 3 ⋅ x 3 ≥ t w_1 \cdot x_1 + w_2 \cdot x_2 + w_3 \cdot x_3 \geq t w1⋅x1+w2⋅x2+w3⋅x3≥t
时,该神经元细胞才会兴奋。我们把t挪到等式左侧来,变成 ( − t ) (-t) (−t),然后把它写成 b b b,变成了:
w 1 ⋅ x 1 + w 2 ⋅ x 2 + w 3 ⋅ x 3 + b ≥ 0 w_1 \cdot x_1 + w_2 \cdot x_2 + w_3 \cdot x_3 + b \geq 0 w1⋅x1+w2⋅x2+w3⋅x3+b≥0
求和计算 sum
Z = w 1 ⋅ x 1 + w 2 ⋅ x 2 + w 3 ⋅ x 3 + b = ∑ i = 1 m ( w i ⋅ x i ) + b \begin{aligned} Z &= w_1 \cdot x_1 + w_2 \cdot x_2 + w_3 \cdot x_3 + b \\\\ &= \sum_{i=1}^m(w_i \cdot x_i) + b \end{aligned} Z=w1⋅x1+w2⋅x2+w3⋅x3+b=i=1∑m(wi⋅xi)+b
在上面的例子中 m = 3 m=3 m=3。我们把 w i ⋅ x i w_i \cdot x_i wi⋅xi变成矩阵运算的话,就变成了:
Z = W ⋅ X + b Z = W \cdot X + b Z=W⋅X+b
- 一个神经元可以有多个输入。
- 一个神经元只能有一个输出,这个输出可以同时输入给多个神经元。
- 一个神经元的 w w w 的数量和输入的数量一致。
- 一个神经元只有一个 b b b。
- w w w 和 b b b 有人为的初始值,在训练过程中被不断修改。
- A A A 可以等于 Z Z Z,即激活函数不是必须有的。
- 一层神经网络中的所有神经元的激活函数必须一致。
2. 梯度下降的数学理解
θ
n
+
1
=
θ
n
−
η
⋅
∇
J
(
θ
)
(1)
\theta_{n+1} = \theta_{n} - \eta \cdot \nabla J(\theta) \tag{1}
θn+1=θn−η⋅∇J(θ)(1)
其中:
- θ n + 1 \theta_{n+1} θn+1:下一个值;
- θ n \theta_n θn:当前值;
- − - −:减号,梯度的反向;
- η \eta η:学习率或步长,控制每一步走的距离,不要太快以免错过了最佳景点,不要太慢以免时间太长;
- ∇ \nabla ∇:梯度,函数当前位置的最快上升点;
- J ( θ ) J(\theta) J(θ):函数。
3.0.1损失函数的作用
损失函数的作用,就是计算神经网络每次迭代的前向计算结果与真实值的差距,从而指导下一步的训练向正确的方向进行。
如何使用损失函数呢?具体步骤:
- 用随机值初始化前向计算公式的参数;
- 代入样本,计算输出的预测值;
- 用损失函数计算预测值和标签值(真实值)的误差;
- 根据损失函数的导数,沿梯度最小方向将误差回传,修正前向计算公式中的各个权重值;
- 进入第2步重复, 直到损失函数值达到一个满意的值就停止迭代。
3.0.2 机器学习常用损失函数
符号规则: a a a 是预测值, y y y 是样本标签值, l o s s loss loss 是损失函数值。
-
Gold Standard Loss,又称0-1误差
l o s s = { 0 a = y 1 a ≠ y loss=\begin{cases} 0 & a=y \\\\ 1 & a \ne y \end{cases} loss=⎩⎪⎨⎪⎧01a=ya=y -
绝对值损失函数
l o s s = ∣ y − a ∣ loss = |y-a| loss=∣y−a∣
- Hinge Loss,铰链/折页损失函数或最大边界损失函数,主要用于SVM(支持向量机)中
l o s s = max ( 0 , 1 − y ⋅ a ) y = ± 1 loss=\max(0,1-y \cdot a) \qquad y=\pm 1 loss=max(0,1−y⋅a)y=±1
- Log Loss,对数损失函数,又叫交叉熵损失函数(cross entropy error)
l o s s = − [ y ⋅ ln ( a ) + ( 1 − y ) ⋅ ln ( 1 − a ) ] y ∈ 0 , 1 loss = -[y \cdot \ln (a) + (1-y) \cdot \ln (1-a)] \qquad y \in \\{ 0,1 \\} loss=−[y⋅ln(a)+(1−y)⋅ln(1−a)]y∈0,1
-
Squared Loss,均方差损失函数
l o s s = ( a − y ) 2 loss=(a-y)^2 loss=(a−y)2 -
Exponential Loss,指数损失函数
l o s s = e − ( y ⋅ a ) loss = e^{-(y \cdot a)} loss=e−(y⋅a)