《Python神经网络编程》阅读笔记3
1.5 有时候一个分类器不足以求解问题
线性分类器存在一个局限性,而理解了这个局限性,我们就可以更好地理解神经网络的设计。
这个局限性就是存在不能用一条直线把问题解答的情况。

可以看到,用两个分类器(直线)就可以解决这个问题。
1.6 神经元——大自然的计算机器
动物大脑比起传统计算机而言具有的显著特征是模糊性。
人具有大约一千亿(1*10^11)个神经元,果蝇具有十万(1*10^5)个神经元,线虫只有302个神经元。我们还不理解大脑的全部功能,但是对于神经元如何使用不同方式计算,我们有一定的认知。
一个神经元接收了一个电输入,输出另一个电信号。
观察表面,神经元不会立即反应,而是会抑制输入,输入足够强之后才可以触发输出。
简而言之就是刺激足够强,才会有反应。
我们用一个激活函数来模拟这种现象:y=1/(1+e^(-x))。
之所以用这个,是因为在后续计算中会比较容易。
神经元会有多个输入,但是介质是一样的,它们的总和是x。
同样,一个神经元的输出可以传递给多个神经元,并且可以控制轴突数量来控制增益K。
我们可以猜测单个轴突末端的输出y是基数,下一个神经元接收到的信号可以是Ky。

大致上就可以构建上图中的模型。
这里的箭头就像轴突一样,每一个箭头都可以有一个权重w,这个w和之前的K意义是一样的,只不过K是离散的整数,w是连续的实数。
这些w在神经网络优化时可能会趋于0,这就相当于链接被断开。
1.7 在神经网络中追踪信号
之前的3*3神经网络还是较为复杂,为了学习,我们研究2*2的神经网络。

神经网络的第一层是输入层,仅表示输入信号。无需计算,所以不会对输入应用激活函数。
而第二层则会带着权重和上一层的输入来计算接下来的输出。
其中权重是神经网络进行学习的内容,实际生物的神经系统中也应该是通过改变突触连接强度来学习的(猜测,虽然大概是对的)!
看起来编写复杂的神经网络会比较麻烦。但实际上通过数学,可以简洁地刻画这样的过程。这样的简洁性不仅对人、对计算机都很有帮助。这个数学方法就是利用矩阵。
记上面2*2神经网络的各权重是w11、w12、w21、w22(大家应该能理解这个意思吧,我就不解释了)。
可以用矩阵将其中一、二层之间的计算关系表示为:

1.9 使用矩阵乘法的三层神经网络示例
三层分别为输入层、隐藏层、输出层。
总之需要一个输入矩阵I表示输入。这个是输入层所做的所有事情——表示输入。
输入到隐藏层的组合调节信号X=W*I,W是权重矩阵。记为Winput_hidden。
隐藏层到输出层也有一个Whidden_output。
我也不太好解释具体的计算,反正我感觉蛮简单的0.0。
就是对中间层、输出层来说,会有一个上一层的输出矩阵O,作为自己的I,然后WI得到调节后的输入X,得到本层的输出矩阵O=sigmoid(X)。
输入层的O=I。