cs231n__4.2 神经网络 Neural networks

CS231n 学习笔记

4.2 神经网络 Neural networks

之前我们已经使用了 很多线性分类函数
现在我们不用单变换的:
cs231n__4.2   神经网络 Neural networks

我们首先有线性层,然后有这个非线性计算,继而在顶层再加入另一个线性层。然后到这里,最后我们可以得到一个计分函数。输出计分向量。

一般来说,神经网络就是由简单函数构成的一组函数,在顶层堆叠在一起,我们用一种层次化的方式将它们堆叠起来。为了形成一个更为复杂的非线性函数。
这就是基本的 多阶段分层计算

注:非线性通常出现在h之前。
h = max(0,W1x)

当然,我们也可以堆更多层
cs231n__4.2   神经网络 Neural networks

这也是深度神经网络的由来,意味着你可以堆很多层,得到很深的网络

实现一个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中完成.


现在我们已经了解了神经元的数学原理了。
那么,我们是如何从生物的神经元中获得灵感的呢?
cs231n__4.2   神经网络 Neural networks

↓↓↓↓↓↓↓↓↓↓↓↓↓这张图对应下面的代码
cs231n__4.2   神经网络 Neural networks

cs231n__4.2   神经网络 Neural networks

生物上的神经元

我们讨论过了多种不同激发函数
cs231n__4.2   神经网络 Neural networks

我们也会讨论神经元的不同架构形式
cs231n__4.2   神经网络 Neural networks

之前我们说的两层神经网络,具体来讲我们有两个线性层,针对每个线性层,我们做了一次矩阵乘法。
一个在神经元中前向传播的例子:
cs231n__4.2   神经网络 Neural networks

写出来是:
cs231n__4.2   神经网络 Neural networks

我们可以用逆推运算来计算

summary:
cs231n__4.2   神经网络 Neural networks

上一篇:CS231n_2020课程任务实现1.3——Softmax


下一篇:cs231n__4. Backpropagation and Neural Network