为什么会写这点心得?
因为算起来,学习和接触深度学习已经4年多了,这期间更多是应用层面,调包侠,调参侠,在基础概念层面尤其是数据推理过程,都是浅尝辄止,这些课必须陆续补上,否则没有内力和心法就去闯江湖,注定被高手打死,或者只能干些边角料的活儿。
我对神经网络的理解
神经元节点的整合作用
每一层的神经元节点都是对前一层所有节点的某种汇总或整合,这是通过一系列不同的权重和偏置得到的。我们可以这样理解:我们希望通过一个节点来掌握前一层所有节点的变化和特征,而安排的节点总数就是要掌握的特征数量。节点数越多,我们就可以越全面、越细微地掌握前一层所表现出的特征。人们通过观察发现,每个节点都会掌握前一层所有节点的某一些局部特征。这告诉我们,每一层的每一个神经元节点都在尝试抓取和识别前一层计算结果的某一个局部特征。
多层神经网络的启发
这里就引出了第2个问题,为什么人们会设计出来这种"神经网络"呢?
这是由于人类大脑对我们的启发。生物学研究,特别是生物神经学,已经发现并描绘出人类大脑是由非常多的神经元构成的。神经元之间的连接方式是多对一同时一对多,非常复杂且彼此关联。这直接启发了人工智能研究中的全连接神经网络模型的发明。至于每个神经元会尝试掌握前一层的某个局部特征,这是神经网络初始发明者所没有预料到的,完全是后来才发现的,可以说是歪打正着。
特征学习的过程
每一层有多少系列的特征以及它们可以被后一层的节点学习到什么程度,我们都是未知的。这个过程都是黑盒,我们只是根据经验人为地设定每一层的节点数量,并且这个数量还受限于我们的算力和内存。假设算力和内存是无限的,那么我们每一层都可以设置无数个节点,这无数个节点就可以在无数个维度或者特征层面上,去总结、整合、提取前一层所有节点的特征。
权重和激活函数的作用
每一层的网络节点不仅要整合前一层的某些或者某一个局部特征,还要负责将整合到的信息传递给后一层网络。但是,在研究和学习的过程中发现,权重乘以输入矩阵再加偏置,这种做加法的线性计算方式传给到后一层的分类方法是非此即彼的。而实际的数据分布是非线性的,必须用曲线才能划分边界(尽管这条曲线我们是无法人为划定出来的)。因此,就需要增加一种计算,将线性的结果转化为非线性的输出,供下一层使用。这种计算没有一定之规,也没有说哪一种计算就是正确的,或者不正确的。人们还是通过不断的尝试和试验才总结出了Sigmoid、ReLU等计算方式,它们能够产生非线性的输出。同时,因为它们具有针对不同输入产生不同输出的能力,这恰恰像人类的脑神经元,对不同强度的信号输入产生不同的输出。这个过程很像对神经元的激活,所以取名叫激活函数。
个人感悟
由此,我深深感慨人类的认知和探索过程是曲折且充满实验性的。许多成果和结果并非预先设定,而是在大胆提出假设、不断发现问题、尝试解决问题以及总结意外惊喜的过程中逐渐演进和迭代,最终形成了让我们回过头去叹为观止的杰作。
对我个人而言,这一过程的启发在于要勇敢尝试、勇敢假设、勇敢试错。我们需要不断地总结、不断地迭代,而不是期望一步到位,或者在短时间内追求完美。正如神经网络的发展一样,每一次的尝试和错误都是构建更深层次理解和进步的基石。
这个过程告诉我们,无论是科学研究还是日常生活中的探索,都需要我们保持一颗开放和进取的心态。通过不断地实践、学习和调整,我们才能逐渐接近目标,实现自我成长和认知的拓展。