《Python 深度学习》——第二章 神经网络的数学基础

内容:

  1. 第一个神经网络示例
  2. 张量与张量运算
  3. 神经网络如何通过反向传播与梯度下降进行学习

张量,张量运算,微分,梯度下降


2.1 初识神经网络

类别(class),样本(sample),标签(label)

1.加载Keras中的MNIST数据集

from keras.datasets  import  mnist

(train_images,train_labels),(test_images,test_labels)=mnist.load_data()

 

训练集,测试集

2.网络框架

from keras import  models

from keras import layers

network=models.Sequential()

network.add(layers.Dense(512,activation='relu',input_shape=(28*28,)))

network.add(layers.Dense(10,activation='softmax'))

 

Dense层:密集连接(全接连)

softmax层:返回概率值

3.编译步骤

network.compile(loss='categorical_crossentropy',optimizer='rmsprop',metrics=['accuracy'])

 

三个参数:

  1. 损失函数(loss function)
  2. 优化器(optimizer)
  3. 在训练和测试过程中需要监控的指标(metric)

4.预处理

train_images=train_images.reshape((60000,28*28))

train_images=train_images.astype('float32')/255

test_images=test_images.reshape((10000,28*28))

test_images=test_images.astype('float32')/255

 

所有值在[0,1]区间

形状变成:样本数*特征数

5.标签处理

from keras.utils import to_categorical

train_labels=to_categorical(train_labels)

test_labels=to_categorical(test_labels)

6.拟合

network.fit(train_images,train_labels,epochs=5,batch_size=128)

 

batch_size指每个小批量有128样本

epochs:迭代次数,所有数据迭代一次叫做一轮(epoch)

所以梯度要更新次数=60000/128*5=469*5=2345

 

训练时显示:损失(loss)和精度(acc)。

2.2  神经网络的数据表示

张量(tensor):基本数据结构

张量的维度(dimension)叫做轴(axis)

2.2.1  标量(0D张量)(scalar)

标量张量,零维张量,0D张量

x.ndim#查看轴的个数,即阶(rank)

2.2.2  向量(1D张量)(vector)

x=np.array([12,3,6,7,14,7])

5D向量≠5D张量=5阶张量

维度(dimensionality):既表示沿某个轴的元素个数,也表示轴的个数。

2.2.3  矩阵(2D张量)(matrix)

轴1:行(row)

轴2:列(column)

2.2.4  3D张量与更高维张量

x=np.array([[[5,78,2,34,0],[6,2,4,5,1]],[[2,4,5,2,5],[3,4,5,,6,7]]]

2.2.5  关键属性

  1. 轴的个数(阶):ndim
  2. 形状:shape
  3. 数据类型:dtype

2.2.6  在Numpy中操作张量

张量切片(tensor  slicing)

2.2.7  数据批量的概念

第一个轴:样本轴(samples axis,样本维度)

深度学习模型将数据拆分成小批量

批量轴(batch axis)或批量维度(batch dimension)

2.2.8  现实世界中的数据张量

  1. 向量数据:2D张量,形状(samples,feature)
  2. 时间序列数据或序列数据:3D张量,形状(sample,timesteps,feature)
  3. 图像:4D张量,形状(samples,height,width,channels)或(samples,channels,height,width)
  4. 视频:5D张量,形状(samples,frames,height,width,channels)或(samples,frames,channels,height,width)

2.2.9  向量数据

样本轴,特征轴

2.2.10  时间序列数据或序列数据

惯例:时间轴为第二个轴

2.2.11  图像数据

通道在后:(samples,height,width,channels):google

通道在前:(samples,channels,height,width):Theano

2.2.12  视频数据

压缩技术,例MPEG格式


2.3  神经网络的“齿轮”:张量运算(tensor operation)

keras.layers.Dense(512,activation='relu')

output=relu(dot(W,input)+b)

relu(x)=max(x,0)

2.3.1  逐元素运算

relu和加法是逐元素(element-wise)计算的

2.3.2  广播(broadcast)

广播轴

2.3.3  张量点积(tensor product)

np.dot(x,y)

2.3.4  张量变形

x.reshape((6,1))

np.transpose(x)#转置(transposition)

2.3.5  张量运算的几何解释

加法几何解释

旋转:与2*2矩阵R做点积,R=[u,v],u=[cos(theta),sin(theta)].T,v=[-sin(theta),cos(theta)].T

2.3.6  深度学习的几何解释

将两张纸放在一起揉成一团,后分开。


2.4  神经网络的“引擎”:基于梯度的

output=relu(dot(W,input)+b)

w,b分别是kernel和bias

随机初始化(random initialization)

 

循环训练(training loop)

  1. 抽取训练样本x和对应目标y组成的数据批量
  2. 在x上运行网络(前向传播(forward pass)),得到预测值y_pred
  3. 计算网络在这批数据上的损失,用于衡量y_pred和y之间的距离
  4. 计算损失相对于网络的梯度(反向传播(back pass))
  5. 沿梯度反方向移动,W-=step*gradient

可微(differentiable),

梯度(gradient)

2.4.1  什么是导数

2.4.2  张量运算的导数:梯度(grandien)

2.4.3  随机梯度下降

直接通过解多个求偏导=0,来求最小值,因参数较多,不具有可行性

小批量随机梯度下降(min-batch stochatic grandient descent)(小批量SGD)

低维表示中形成的直觉在实践中不一定总是准确的。

SGD变体,例带动量的SGD,Adagrad,RMSProp。

这些变体称为优化方法(optimization method)或优化器(optimizer)

2.4.4  链式求导:反向传播算法

链式法则(chain rule):(f(g(x))'=f'(g(x))*g'(x)

反向传播(backpropagation):将链式法则用于神经网络梯度值的计算。


2.5  回顾第一个例子


本章小结

学习:找到一组参数,使损失函数最小化

学习的过程:每一个批量,更新一次梯度。在乘以学习率

可微,才可使用求导的链式法则

损失:需要最小化的量

优化器:使用梯度更新的具体方式

 

 

你可能感兴趣的:(深度学习)