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

本文深入浅出地介绍了神经网络的基础概念,包括张量运算、反向传播与梯度下降等核心原理,并通过一个MNIST手写数字识别的实例,详细展示了从数据预处理到模型训练的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容:

  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  回顾第一个例子


本章小结

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

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

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

损失:需要最小化的量

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

 

 

学习人工智能,机器学习都离不开数学基础和编程知识。无论你是数据科学的初学者还是已经从事人工智能开发的有经验人员,这门课都适合于你。为什么这么说?首先人工智能和机器学习本质上就是算法,而算法就是数学及统计学以及编程的结合。当前市场上有许多开源的软件包如SKLEARN确实可以帮助没经验的或缺乏数学或算法基础的人实现机器学习模型及预测,但这些工具无法使你真正懂得算法的本质或来源,或者无法使你在不同场合下灵活运用及改进算法。记住,在实际工作中找到适合应用场景的解决方案是最难但是最重要的。但这离不开数学基础和算法理解。比如,线性回归是一类普遍的机器学习算法,所有的机器学习软件都有现成的方法实现模型,但如果在训练数据中加入几条新数据,那么新建立的模型和原来的模型有和联系或不同?再比如,为什么深度神经网络中的Sigmoid函数一般只用到输出层?神经网络的向后传播理论如何与泰勒展开和复合函数的偏导数联系在一起?人工智能中推荐系统和文字向量如何与矩阵的奇异分解以及特征向量联系?模型中对标签进行数据变换如何影响预测值?所有这些问题的答案,你都可以从本课中找到线索。本课系统地讲述了有关人工智能,机器学习背后的数学知识。特别指出,微积分和代数知识是本课的核心。统计学基础被安排在另外的课程中。除此之外,我在每一章节或主要知识点后都安排了各类程序以解释和回顾所学到的东西。最后要提到的是,这不是一门工程项目实践课。但我会另外专门安排有关人工智能,机器学习的实践课程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值