cs231n__4.2 神经网络 Neural networks

不念不忘少年蓝@ 2023-08-17 16:36 112阅读 0赞

CS231n 学习笔记

4.2 神经网络 Neural networks

之前我们已经使用了 很多线性分类函数
现在我们不用单变换的:
1737954-20190818085439413-243364042.png

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

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

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

当然,我们也可以堆更多层
1737954-20190818085451823-234086661.png

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

实现一个2层的神经网络只需要20行代码:

  1. 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中完成.


现在我们已经了解了神经元的数学原理了。
那么,我们是如何从生物的神经元中获得灵感的呢?
1737954-20190818085512320-1298228596.png

↓↓↓↓↓↓↓↓↓↓↓↓↓这张图对应下面的代码
1737954-20190818085547215-957769471.png

1737954-20190818085558322-1842064377.png

生物上的神经元

我们讨论过了多种不同激发函数
1737954-20190818085609724-619243151.png

我们也会讨论神经元的不同架构形式
1737954-20190818085623269-1489649183.png

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

写出来是:
1737954-20190818085643487-624566281.png

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

summary:
1737954-20190818085653720-1824017002.png

转载于:https://www.cnblogs.com/orangestar/p/11371413.html

发表评论

表情:
评论列表 (有 0 条评论,112人围观)

还没有评论,来说两句吧...

相关阅读