前言
这篇博文也算不上什么入门教程,单纯只是记录一下看了3blue1brown的深度学习后的认识和想法。
对神经网络的感觉
我觉得这像是形异但神似的仿生学。
从数不尽的神经元以及神奇而又错综复杂的神经连结的底层,到会哭会笑的自我感知以及充满无穷无尽的创意智慧的顶层,人类对于自己的大脑如何从神经到产生自我意识以及智慧的认识,依然有着断层。尽管对于大脑的研究不断深入,但是这一步,却是始终无法踏出。
所以不再去考虑外形,而是利用强大的算力模拟神经的连结和运转,来期望能够产生智能。
神经网络的结构
神经元
神经网络的最基本的单元便是神经元。但在计算机里的神经元更像是一个函数:它有输入,有输出。但是都是数值,模拟神经兴奋的强度。
然后许多的神经元会组成一层,并且会有很多层。上一层的每个神经元都会把自己的信号输送到下一层的每个神经元。也就是说如果设第层有个神经元,第层有个神经元,那么这两层之间的连结数就会多达.
神经连结以及处理
但是神经元之间的连结也会有强有弱,所以对来自上一层每一个神经元的输入都会乘上一个单独权重(eight),然后加和。
最后每个神经元自己还有一个决定自己是否容易被激活的阈值,所以需要加上一个偏置(ias),最后得到一个值(um),也就是这个神经元的对下一层的输出。
但是呢,还会有另外一些手段,对进行进一步处理,然后再输出。
一个比较简单但是不知道为什么的例子就是线性整流函数(Rectified Linear Unit, ReLU),里面最简单的就是 还有一个就是逻辑函数
符号设定
对于第层的第个神经元而言,其输出定为,其偏置定为,其对于前一层的第个神经元的神经连结的权重为. 第层拥有的神经节数为 设处理函数为,所以可以得到
神经网络的输入与输出
除了第一层的输入层和最后一层的输出层,中间的那些隐藏的层就是如上面这样接受处理。但是输入层和输出层就不一样了。
接下来,都以一个最基本的 AI 项目为例:识别手写数字。
输入层
那么输入首先应该是一张图片,那么每一个像素都应该作为输入层的一个神经元,向下一层输出这个像素的值(比如黑:1,白:0)
输出层
输出层应该有 10 个神经元代表 0-9 的十个数字,如果说输出值限制在之间的话,那么每个神经元的输出值就代表了所识别的图片是这个神经元代表的数字的概率。
那么概率最大的就是这整个神经网络的识别结果。
神经网络的训练
但是可以看出直接让神经网络不经训练去识别数字,完全就是等于乱猜。 那么究竟什么是训练(学习)呢?
由于要构建神经网络,除了输入层和输出层的神经元个数是和外部条件有关的,中间可以添加若干层神经元,每一层又可以有若干个神经元。所以每个神经元都会有一个偏置.
那么相邻层的每个神经元之间就会产生许多的神经连结。每个神经连结都会带上一个权重.
所以就会有很多的和。那么对于两个参数组的不断调节,然后就使得神经网络能够做到一些智能目标,就是训练要做的。
外话:但是,为什么这样就可以产生智能呢?不知道,因为这就是在不知原因的情况下模仿生物神经。除非到知道人类大脑怎么产生智能的时候。
目标代价
在训练之前,先要知道刚建立的神经网络的识别结果(有多智障)与我们的预期差了多少。 对于输出层的 10 个神经元,每个都会产生一个概率值(),但是期望自然是正确的那个数字的输出是 1,其余都是 0. 在这里设的期望值为(arget),目标代价为(ost). 所以对于识别手写来说:
梯度计算与梯度下降
但是光知道目标代价并没用,还需要知道手头上的参数和会对产生多少影响,然后怎么反过来调节和.
想知道一个量对一个量的影响程度有多少,那么就应该让分别对和进行求导。然后根据导数进行调整,最终目的就是要让变小。
(To be continued)