人工神经网络的大概架构是基于生物神经的,其许多细节也与神经的工作原理类似。最早的工作来源于对哺乳动物视觉皮层的研究。视觉皮层从上至下分层处理从视神经传来的信号,在这一过程中,至少可以分为4层,视网膜汇总产生的稳定图像信号(眼动,人与环境的交互是在不断地变化的,人所看到的世界是动态发展的)传到第一层,第一层分离斜向的线段,有的神经簇用来分离垂直的线段,有的神经簇用来分离其他角度的线段,这样一个图像就被拆分成线段的集合,但我们不知道这些线段代表什么含义,第二层用来汇总产生一些比线段更高一阶的信息(矩形、圆形),第三层用来产生更高阶的信息……逐层对信息的加工提炼汇总,最终使我们知道了各种事物(是猫是狗)。同时,就像神经突触连接的强度、接触面积等会不断地受到某些刺激而发生变化,神经间信号沟通的强度、传播速率、延时也不断变化,反映在神经网络上,训练神经网络时,神经网络的参数也应该会不断变化。这过程中蕴含着复杂的概率模型,这些概率模型对应于期望解决的任务,我们期望的是用一次次的采样,用一次次的修正,找到某些特定的概率模型,来描述特定任务的特点、规律,用一个比较大的概率来解决特定的任务,来挑战这个不确定的、满怀恶意的世界。
看起来,人工神经网络是个有着巨大肌肉的壮汉,他用“蛮力”糅合一些关系,但人类何尝不也用“蛮力”来认识世界,我们获得的许多知识本身具有暴力的性质,是基于自己的观察、理解来逐步接近真实世界的……
比如人类对原子的认识,从实心球到枣糕到行星到电子云……人永远无法画出真实的原子。
神经网络利用梯度下降来学习权重和偏置,那如何快速计算梯度、更新权重和偏置、训练网络呢?
误差反向传播算法。
这可真是美妙极了,我们能用简洁的数学式子显示调整参数的过程。😍😍😍😍
一开始,我不得不被这些复杂的数学符号和各种奇怪的公式和一条条纠缠着交媾的线段和节点绕得晕头转向,六主无神,差点就入土了。(我急缺高数、线代的前置知识,我近视,我为了BP通宵了一晚)
后来,看到了一个神奇的比喻:BP算法跟多米诺骨牌一样,只要轻敲最后一张牌,前面的一切都会轻易地顺着你想要的样子做出改变。