CS231n 学习笔记
4.2 神经网络 Neural networks
之前我们已经使用了 很多线性分类函数
现在我们不用单变换的:
我们首先有线性层,然后有这个非线性计算,继而在顶层再加入另一个线性层。然后到这里,最后我们可以得到一个计分函数。输出计分向量。
一般来说,神经网络就是由简单函数构成的一组函数,在顶层堆叠在一起,我们用一种层次化的方式将它们堆叠起来。为了形成一个更为复杂的非线性函数。
这就是基本的 多阶段分层计算
注:非线性通常出现在h之前。
h = max(0,W1x)
当然,我们也可以堆更多层
这也是深度神经网络的由来,意味着你可以堆很多层,得到很深的网络
实现一个2层的神经网络只需要20行代码:
import numpy as np
from numpy.random import randn
N, D_in, H, D_out = 64, 1000, 100, 10
x, y = randn(N, D_in), randn(N, D_out)
w1, w2 = randn(D_in, H), randn(H, D_out)
for t in range(2000):
h = 1 / (1 + np.exp(-x.dot(w1)))
y_pred = h.dot(w2)
loss = np.square(y_pred - y).sum()
print(t, loss)
grad_y_pred = 2.0 * (y_pred - y)
grad_w2 = h.T.dot(grad_y_pred)
grad_h = grad_y_pred.dot(w2.T)
grad_w1 = x.T.dot(grad_h * h * (1-h))
w1 -= 1e-4 * grad_w1
w2 -= 1e-4 * grad_w2
当然,剩余部分我们将在Assignment_2中完成.
现在我们已经了解了神经元的数学原理了。
那么,我们是如何从生物的神经元中获得灵感的呢?
↓↓↓↓↓↓↓↓↓↓↓↓↓这张图对应下面的代码
生物上的神经元
我们讨论过了多种不同激发函数
我们也会讨论神经元的不同架构形式
之前我们说的两层神经网络,具体来讲我们有两个线性层,针对每个线性层,我们做了一次矩阵乘法。
一个在神经元中前向传播的例子:
写出来是:
我们可以用逆推运算来计算
summary: