第二次作业:深度学习基础

本博客是关于深度学习基础的作业总结,涵盖了前馈、反馈和双向深度网络的理论,包括卷积神经网络、反卷积网络和受限玻尔兹曼机。此外,还介绍了PyTorch基础练习,通过螺旋数据分类问题展示了线性模型和两层神经网络的训练。实验体会中对比了ReLU和sigmoid激活函数在训练效果和梯度消失问题上的表现。
摘要由CSDN通过智能技术生成

Assginment2:Basis of Deep Learning

本博客为OUC2022秋季软件工程第二周作业

一、问题

【第一部分】视频学习心得及问题总结

根据视频的学习内容,写一个总结,最后列出没有学明白的问题,针对大家的疑问,下次课会讨论一下,大家可提前把问题列出来。

【第二部分】代码练习

在谷歌 Colab 上完成 pytorch 代码练习中的 2.1 pytorch基础练习、2.2 螺旋数据分类,关键步骤截图,并附一些自己的想法和解读。

二、作业内容

ps:最后的实验体会有惊喜!

Part1 视频心得和问题总结

视频心得:
绪论部分:

机器学习并非最初用于有解析解的问题,而是用于给出一个近似解,但是随着问题复杂度的提升,后期也会有人采用使用机器学习解决存在解析解的问题。

参数模型:对数据分布做了假设

非参数模型:不对数据分布进行假设,数据的所有统计特性都来源于数据本身,且非参数模型的时空复杂度一般比参数模型大得多

AI方向在17年左右缺口较大,但是目前存在过热的趋势,且目前AI方向的应用并非很多,大致可行的落地项目分为cv和nlp两大类,在3,4年后这个行业是否会存在竞争压力过大而难以就业的问题

深度学习概述部分:

深度学习的概念起源于人工神经网络的研究,有多个隐层的多层感知器是深度学习模型的一个很好的范例。
深度学习的基本思想:假设有系统S,它有n层(S1,…,Sn),输入为I,输出为O,可形象的表示为:I=>S1=>S2=>… =>Sn=>O。为了使输出O尽可能的接近输入I,可以通过调整系统中的参数,这样就可以得到输入I的一系列层次特征S1,S2,…,Sn。对于堆叠的多个层,其中一层的输出作为其下一层的输入,以实现对输入数据的分级表达,这就是深度学习的基本思想。

深度神经网络是由多个单层非线性网络叠加而成的,常见的单层网络按照编码解码情况分为3类:只包含编码器部分、只包含解码器部分、既有编码器部分也有解码器部分。编码器提供从输入到隐含特征空间的自底向上的映射,解码器以重建结果尽可能接近原始输入为目标将隐含特征映射到输入空间。

1、 前馈深度网络

典型的前馈神经网络有多层感知机和卷积神经网络等。

(1) 单层卷积神经网络:

卷积阶段,通过提取信号的不同特征实现输入信号进行特定模式的观测。

(2) 卷积神经网络:

将单层的卷积神经网络进行多次堆叠,前一层的输出作为后一层的输入,便构成卷积神经网络。

(3) 卷积神经网络的特点:

卷积神经网络的特点在于,采用原始信号(一般为图像)直接作为网络的输入,避免了传统识别算法中复杂的特征提取和图像重建过程。

2、 反馈深度网络

典型的反馈深度网络有反卷积网络、层次稀疏编码网络等。

(1) 单层反卷积网络:

反卷积网络是通过先验学习,对信号进行稀疏分解和重构的正则化方法。

(2) 反卷积网络:

单层反卷积网络进行多层叠加,可得到反卷积网络。多层模型中,在学习滤波器组的同时进行特征图的推导,第L层的特征图和滤波器是由第L-1层的特征图通过反卷积计算分解获得。反卷积网络训练时,使用一组不同的信号y,求解C(y),进行滤波器组f和特征图z的迭代交替优化。训练从第1层开始,采用贪心算法,逐层向上进行优化,各层间的优化是独立的。

(3) 反卷积网络的特点:

反卷积网络的特点在于,通过求解最优化输入信号分解问题计算特征,而不是利用编码器进行近似,这样能使隐层的特征更加精准,更有利于信号的分类或重建。

3、 双向深度网络

典型的双向深度网络有深度玻尔兹曼机、深度信念网络、栈式自编码器等。

(1) 受限玻尔兹曼机:

玻尔兹曼机(Boltzmann machine, BM)是一种随机的递归神经网络,由G. E.Hinton等提出,是能通过学习数据固有内在表示、解决复杂学习问题的最早的人工神经网络之一。

(2) 深度玻尔兹曼机:

将多个受限玻尔兹曼机堆叠,前一层的输出作为后一层的输入,便构成了深度玻尔兹曼机。

问题总结

1.有个讲了很久的东西,结果一个小时后你告诉我他过时了,有点仙人跳啊!

2.反卷积听得不是很明白

3.受限玻尔兹曼机有点疑问。

4.对梯度消失的理解

最底层的参数改变,传递到前面层的时候影响减小,被忽略。多层神经网络没办法传递,收敛情况没有单层神经网络好。梯度数学公式推导没有理解,存在一些问题。有什么其他方法解决梯度消失?梯度消失的解决在代码中应该怎么体现?

Part2 代码练习

感谢施雪雯同学贡献的代码和截图~
大家做的都很好,我就随便取了一个人的代码截图了。

2.1 pytorch 基础练习

凡是用Tensor进行各种运算的,都是Function

最终,还是需要用Tensor来进行计算的,计算无非是:

基本运算,加减乘除,求幂求余
布尔运算,大于小于,最大最小
线性运算,矩阵乘法,求模,求行列式
基本运算包括: abs/sqrt/div/exp/fmod/pow ,及一些三角函数 cos/ sin/ asin/ atan2/ cosh,及 ceil/round/floor/trunc

布尔运算包括: gt/lt/ge/le/eq/ne,topk, sort, max/min

线性计算包括: trace, diag, mm/bmm,t,dot/cross,inverse,svd 等

2.1.1. 定义数据

一般定义数据使用torch.tensor(), tensor的意思是张量,是数字各种形式的总称
assert
assert

Tensor支持各种各样类型的数据,包括:
torch.float32, torch.float64, torch.float16, torch.uint8, torch.int8, torch.int16, torch.int32, torch.int64
创建Tensor有多种方法,包括:ones, zeros, eye, arange, linspace, rand, randn, normal, uniform, randperm
assert
assert
assert

2.1.2. 定义操作

assert
assert
assert

transpose()只能一次操作两个维度

函数返回输入矩阵input的转置

input (Tensor) – 输入张量,必填

dim0 (int) – 转置的第一维,默认0,可选

dim1 (int) – 转置的第二维,默认1,可选
assert

assert

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值