记得17年第一次阅读深度学习相关文献及代码觉得不是很顺畅,做客户端开发时间久了,思维惯性往往觉得比较迷茫。
而且文章中涉及的数学公式及各种符号又觉得很迷惑,虽然文章读下来了,代码也调试过了,意识里并没有轻松的感觉,隔段时间再看,脑子里又是空空如也。
其实目前来看,深度学习的底层逻辑很简单,只是当时完全迷失在了数学逻辑的符号,公式推导,及代码对应层面,对于神经网络学习的精髓并未完全把握。
我尝试着就自己的理解,极简化其中的数学逻辑,阐述最简单的神经网络学习模型具体原理,不会涉及什么Tensorflow,卷积神经网络这些经常听到的概念,就是很朴素的语言。
可以参考 Michael Nielsen 的经典文章 Neural Networks and Deep Learning
神经网络 - Hello Wrold
具体神经网络缘由介绍很多,此处就不冗余跳过,从一个最简单的问题开始
其中,中间的两层暂时当做大黑盒,黑盒里面就进行着处理识别数字的具体工作
最左边的一层 784 个神经元
最右边的一层神经元,激活值也为 0~1,表明输入的图像 是具体某一个罗马数字的可能性
至于中间为啥两层,每层16个神经元,可以认为就这么着,重在理解模型为主
最终构成了一个神经网络,这个网络包含了 784+16+16+10 个神经元
我们认知手写数字的逻辑可能是这样的
其中 横 组件边缘较 暗的部分,也就是 输入层横 边缘激活值较低的神经元, 对第二层 对应 横组件的 那个神经元 作用就弱,具体表现就是 第一层的神经元连过来的线就弱一些
第一层其余的神经元(跟横无关的神经元) 此刻 练过来的线 甚至可能看不见,影响微乎其微
w表示 - 神经元之间的连线强弱
a表示 - 神经元的激活值
此时,这个装着 横 的神经元的激活值 就是 w1 a1 + w2 a2 + ..... + w784*a784
Sigmoid(w1 a1 + w2 a2 + ..... + w784*a784 - 1), 正好对应 超过上图中的 标注点,神经元激发
最终 Sigmoid(w1 a1 + w2 a2 + ..... + w784*a784 + bias), bias 就是 上面的 -1
抽象网络关系
整个网络中 包含的
开关变量总数:784 16 + 16 16 + 16 10 + 16 2 + 10 = 13002