308 Chapter 9. 人工神经网络和神经语言建模 肖桐 朱靖波
这里以 NiuTensor 为例对张量计算库进行简单介绍。这类库需要提供张量计算接
口,如张量的声明、定义和张量的各种代数运算,各种单元算子,如 +、−、∗、/、
Log (取对数)、Exp (指数运算)、Power(幂方运算)、Absolute(绝对值)等,还
有 Sigmoid、Softmax 等激活函数。除了上述单元算子外,张量计算库还支持张量之
间的高阶运算,其中最常用的是矩阵乘法。表9.2 展示了一些常用的函数。
表 9.2 NiuTensor 支持的部分函数
函数 描述
a.Reshape(o,s) 把张量 a 变换成阶为 o、形状为 s 的张量
a.Get(pos) 取张量 a 中位置为 pos 的元素
a.Set(v,pos) 把张量 a 中位置为 pos 的元素值设为 v
a.Dump(file) 把张量 a 存到 file 中,file 为文件句柄
a.Read(file) 从 file 中读取张量 a,file 为文件句柄
Power(a,p) 计算指数 a
p
Linear(a,s,b) 计算 a ∗s + b,s 和 b 都是一个实数
CopyValue(a) 构建张量 a 的一个拷贝
ReduceMax(a,d) 对张量 a 沿着方向 d 进行规约,得到最大值
ReduceSum(a,d) 对张量 a 沿着方向 d 进行规约,得到和
Concatenate(a,b,d) 把两个张量 a 和 b 沿 d 方向级联
Merge(a,d) 对张量 a 沿 d 方向合并
Split(a,d,n) 对张量 a 沿 d 方向分裂成 n 份
Sigmoid(a) 对张量 a 进行 Sigmoid 变换
Softmax(a) 对张量 a 进行 Softmax 变换,沿最后一个方向
HardTanh(a) 对张量 a 进行 HardTanh 变换(双曲正切的近似)
Rectify(a) 对张量 a 进行 ReLU 变换
9.3.4 前向传播与计算图
有了张量这个工具,可以很容易地实现任意的神经网络。反过来,神经网络都
可以被看作是张量的函数。一种经典的神经网络计算模型是:给定输入张量,各个
神经网络层逐层进行张量计算之后,最后得到输出张量。这个过程也被称作前向传播
(Forward Propagation),它常常被应用在使用神经网络对新的样本进行推断中。
来看一个具体的例子,图9.27展示了一个根据天气情况判断穿衣指数(穿衣指数
是人们穿衣薄厚的依据)的过程,将当天的天空状况、低空气温、水平气压作为输
入,通过一层神经元在输入数据中提取温度、风速两方面的特征,并根据这两方面