自从2018年开始接触深度学习网络到现在,已经过去了7年时间,从最开始接触的CNN,到后来的RNN,LSTM,GRU, 再到后来的Transformer,以及最近大火的LLM,在接触这些网络架构的时候, 我一直在思考一个问题,这些网络架构到底是如何设计出来的,以及这些网络架构的原理是什么。
神经网络的零件
当然每个阶段思考的问题是不一样的,在最初的时候是拼命的想要理解网络的原理,为什么能获得预期的效果, 最开始接触的是CNN,当时不论上班还是下班,都在看相关的论文,看相关的视频,看相关的博客,当时资料比较少, 书一遍一遍翻,思考每一个参数的作用和意义,比如卷积层的步长、卷积的方式等等,计算输入图像的大小怎么才能算出准确的输出等。 现在看来当时思考的问题就是要想明白一个网络的单独零件的作用和含义的。
比如卷积如何提取特征,池化如何做特征筛选,线性层如何计算特征和转换特征,激活函数如何增加非线性。
当时看到卷积的操作,有一次突然联想到数学期望,突然感觉卷积的加权求和形式上不就和高中学的数学期望很像吗, 数学期望的本身也是计算一个预测值,而卷积操作不也是加权求和吗,后来想单一的这一步骤其实用数学期望解释好像也蛮有道理的。 当然这个想法也就自己想想,毕竟不是什么权威。在数学中都是符合和形式表示的,在形式上或者含义上说得通,但可能定义域和值域不一样。 形式上相同也不完全等价,当时就觉得这样理解也可以,只给一两个朋友这么说过,毕竟只是自己的理解而已。
不光CNN的组件是提取、丢弃、计算或转换的基本思想。其实RNN也是类似的思路,比如LSTM的输入门、输出门、遗忘门, 其实也是对信息的一种筛选,只不过RNN的筛选是基于时间序列的,而CNN的筛选是基于空间序列的。