🖥️神经网络 I

type
status
date
slug
summary
tags
category
icon
password

引入

  • 生物启发:大脑由大量神经元(Neuron)构成,彼此连接、传递电信号。 人工神经网络用数学函数近似这种连接-激活机制。
  • 机器学习观:网络是一个可学习的函数族 ,通过数据学习参数 ,把输入映射到输出
  • 与感知机一脉相承:感知机是最简单的“单层神经元”模型;添加非线性与多层结构,就得到能拟合复杂函数的深度神经网络(DNN)。

神经元与激活函数

给定输入向量 ,权重 和偏差
其中 激活函数(Activation),为模型引入非线性。
常见的非线性激活函数(Non-Linear Activation Functions)有以下几种:
  • ReLU:(简洁高效,现代网络常用)
    • notion image
  • Logistic Sigmoid:(输出可解释为概率)
    • notion image
  • Step:(一般仅用于示意/感知机)
    • notion image
  • Tanh:(零均值、饱和区间平滑)
    • notion image
单神经元是线性模型+非线性激活的组合。其中,线性部分提供可学习的方向与阈值,非线性激活使组合函数具备分段非线性的表达力。

感知机

以下面这个最简单的神经网络为例:
notion image
通过选择恰当的 和激活函数 ,使 与真值表一致。

示例:使用感知机实现逻辑或

notion image

示例:使用感知机实现逻辑与

notion image

代码实现:构建神经元和神经网络的层

notion image
notion image
notion image
练习 #2.1 代码实现
  1. 用代码构建神经元类Neuron(红色圆圈代表的节点)
      • 输入:num_input:(上图 num_input 为2)
      • 初始化:
        • 权重 w:一个包含所有权重的列表,注意每个权重都是类 Value
        • 偏差 b:偏差是类 Value
        • 初始化是 [-1,1] 之间随机生成权重和偏差,可以用 random.uniform(a,b)ab 之间的均匀分布生成随机数
      • __call__:计算神经元的输出(返回的是一个 Value 类),激活函数为 tanh()

多层神经网络

多层神经网络(Multilayer Neural Network, DNN)是具有输入层、输出层和至少一个隐藏层(Hidden Layers)的人工神经网络,可对更复杂的非线性函数进行建模。
多层感知机(Multilayer Perceptron, MLP)可以视为朴素的一种 DNN,它通过引入一个或多个隐藏层来克服感知机的局限性。它的每一层都是全连接层,因此也叫全连接前馈神经网络。
notion image

示例:使用神经网络表示非线性函数

notion image

代码实现:构建 MLP 类

notion image
练习 #4 代码实现
  1. 构建 MLP 类
    1.  

神经网络的训练

梯度下降与链式法则

是一个用来衡量模型 拟合能力的函数,称损失函数(Loss Function)。在神经网络的训练过程中,我们需要不断调整参数 ,以最小化损失函数。这是一个优化问题,可以通过梯度下降算法求解:
notion image
notion image
由上式可见,导数(梯度)的计算是模型训练的关键步骤。尽管这些计算满足链式法则,但是我们显然不可能暴力手算——我们会依赖大多数现代深度学习框架都会提供的自动微分(Autograd, AD)技术帮助我们计算。
当我们通过每个连续的函数传递数据时,框架会构建一个计算图,记录每个值如何依赖于其他值。为了计算导数,自动微分沿此图反向工作,应用链式法则。以这种方式应用链式法则的计算算法称为反向传播(Backpropagation)。
关于 AD 的详细介绍,可参见 zhuanlan.zhihu.com实现你自己的自动微分 · Julia编程指南。此处不再赘述它的基本原理和优势。
下面我们来通过 Python 代码“手搓”自动微分。

代码实现:构建拓扑排序函数

notion image

代码实现:实现 tanh 函数

notion image
notion image
 
上一篇
机器学习
下一篇
Article Template
Loading...