CNN初解
首先,神经网络(Neural Networks)并不复杂,仅仅是一个专业词汇(唬人词汇),事实上,它远比想象中的要简单很多。
前置需求:一点点线性代数,一点点Python基础(如果都不了解,也能看懂大概)。
1. 初识神经网络(Neural Networks)
1.1 建立模块:神经元(Neurons)
首先神经网络的基本单元就是”神经元(Neurons)”。一个神经元的构成,首先有多个输入,然后对多个输入进行一些数学的运算,最后得到一个输出。 下图是一个典型的2个输入的神经元。
神经元中发生了三件事情:
首先,每个输入乘以一个权重(Weight):(图中红色方块)
$$
x_1 \rightarrow x_1 * w_1 \
x_2 \rightarrow x_2 * w_2
$$然后,所有的乘了权重之后的输入加到一起,并再加上一个偏置(bias)b:(图中绿色方块)
$$
(x_1 * w_1) + (x_2 * w_2) + b
$$
偏置b在此图中没有画出,后续学习中,可以理解偏置b就是一个权重固定为1的输入,有的教材中就将偏置b,直接等效为一个$$x_0$$乘以一个固定权重为1的输入
$$
(x_0 * 1) + (x_1 * w_1) + (x_2 * w_2)
$$最后,加到一起的和,经过一个激活函数:(图中橙色方块)
$$
y = f(x_1 * w_1 + x_2 * w_2 + b)
$$
这个激活函数主要作用是将一个无界限的输入(多个输入乘以权重相加后,是一个没有确定的界限的值),变为具有良好、可预测形式的输出。如下图的例子,就是一个常用的sogmoid激活函数(当然还有很多其它类型的激活函数,这里不进一步展开)。