神经网络工作

1,神经元在做什么?

神经网络的每个神经元都在做2次运算

1,线性运算 z=wx+b 对输入进行加权求和,权重w和偏移量b

2,非线性映射 a=f(z)通过激活函数得到最终的信号输出

2,为什么要用非线性变换

没有激活函数,100 层 = 1 层

假设去掉所有激活函数,一个三层神经网络的输出:

把括号展开后整体退化为一次线性变换:

无论堆多少层,没有激活函数的神经网络始终是一个线性模型。

3,为什么不一步到位?

既然非线性这么重要,为什么不干脆把 Wx+b这一步就做成非线性?比如 z=Wx

2+b,省掉激活函数岂不更香?

从理论上讲没问题------但工程上做不到。

原因有两个:① 线性运算的工程红利太大,丢不起;② 强非线性叠加会引发数值灾难。

理由 ① 线性的工程红利

Wx+b看似平平无奇,背后是几十年的数值计算积累:

硬件加速

GPU / TPU 就是为矩阵乘法量身打造的,cuBLAS 几毫秒就能算完亿级规模的 Wx。

梯度极简

反向传播一行公式搞定。

一旦把它换成复杂非线性,这些红利全部消失。

理由 ② 数值会指数级膨胀