赞
踩
近期需要学习下这门课程,我是在B站:邱锡鹏教授的《神经网络与深度学习》所学习的,这篇此博客当作我的学习笔记来用,有遗忘时回来看一看
机器学习就是一个分类问题,分出各种值的类型
也是回归问题
什么是机器学习≈构建一个映射函数
开法人工智能系统的流程
损失函数是为了表示预测模型和真实值之间的差距
平方损失函数一般不适合分类问题
正则化:所有损害优化的方法都是正则化
知乎上的一个博主对正则化,经验风险、结构风险讲的非常好、
经验风险:训练集所带来的错误
使得经验错误最小就是一个优化的方法
最大似然估计:
与经验风险最小化的解等价
贝叶斯估计:
几种概率和最小化的关系
模型选择的几种经典例子
偏差表示训练模型与最优模型之间的差值
方差表示在不同训练集训练出的模型的差值
偏差和方差分解给机器学习模型提供了一种分析途径,但在实际操作中难以直接衡量.一般来说,当一个模型在训练集上的错误率比较高时,说明模型的拟合能力不够,偏差比较高.这种情况可以通过增加数据特征、提高模型复杂度、减小正则化系数等操作来改进.当模型在训练集上的错误率比较低,但验证集上的错误率比较高时,说明模型过拟合,方差比较高.这种情况可以通过降低模型复杂度、加大正则化系数、引入先验等方法来缓解.此外,还有一种有效降低方差的方法为集成模型,即通过多个高方差模型的平均来降低方差
线性分类器是一种有监督学习
可以解决图像分类模型和文本监督模型
多分类的几种方法
交叉熵用来作为损失函数
交叉熵越大,预测的就越不准
交叉熵为零,说明准确率为100%
Logistic回归
将获取的值,从(-∞,+∞)映射到(0,1)的范围上
解决分类问题的一个很好的函数
Softmax回归
Softmax回归是在Logistic回归上的扩展,可以取解决多分类问题
转载博主说的这句话bitcarmanlee
如果你在开发一个音乐分类的应用,需要对k种类型的音乐进行识别,那么是选择使用 softmax 分类器呢,还是使用 logistic 回归算法建立 k 个独立的二元分类器呢?
这一选择取决于你的类别之间是否互斥,例如,如果你有四个类别的音乐,分别为:古典音乐、乡村音乐、摇滚乐和爵士乐,那么你可以假设每个训练样本只会被打上一个标签(即:一首歌只能属于这四种音乐类型的其中一种),此时你应该使用类别数 k = 4 的softmax回归。(如果在你的数据集中,有的歌曲不属于以上四类的其中任何一类,那么你可以添加一个“其他类”,并将类别数 k 设为5。)
如果你的四个类别如下:人声音乐、舞曲、影视原声、流行歌曲,那么这些类别之间并不是互斥的。例如:一首歌曲可以来源于影视原声,同时也包含人声 。这种情况下,使用4个二分类的 logistic 回归分类器更为合适。这样,对于每个新的音乐作品 ,我们的算法可以分别判断它是否属于各个类别。
np.argmax函数,返回一组数中最大的数的坐标
one_dim_array = np.array([1, 4, 5, 3, 7, 2, 6])
print(np.argmax(one_dim_array))
输出:4
感知机
一种可以解决二分类的学习算法
当分类错误,更新权重,一直到全部都能分类正确为止
犯错W参数就发生迭代
支持向量机
软间隔:
当约束条件比较严格,找不到最优解的时候,引入一种松弛变量
支持向量机还支持核函数:
核函数的功能就是从低维度的空间向高维度空间转换的函数, 因为在低维空间不可以线性分类的问题到高维度空间就可以线性分类的。 低维空间的点映射到高维空间的点后,两个点的内积 就是核函数。
梯度下降算法可以求出局部最优解
当陷入到鞍点的时候,梯度消失,无法继续优化
前馈网络
神经网络,用一个加权的函数表示
斜坡函数计算更高效
复合函数,S型函数和斜坡函数的混合,通过两个参数进行控制
由多个神经元所连接的网络即叫神经网络
又称BP(Back Propagation)
神经网络,只与当前的输入有关
卷积神经网络:与之前的输入也有关
局部不变性
卷积层与全连接层相比,参数会少
用卷积来代替全连接的好处是可以大大减少超参数的设定,大大减少卷积层和下一层的连接数,提高训练效率
卷积层可以捕捉某种特定的局部特称
降低特征维数,避免出现过拟合的现象
汇聚层的主要优点之一是减轻卷积层对位置的过度敏感
当图片进行上下作用平移时,卷积层仍然可以识别到该模式
卷积网络接收 当前的卷积网络结构趋向于小卷积,大深度
在卷积核中间加入空洞,来变相增加卷积核的大小
增大感受野
将卷积从低微特征映射到高维特征
残差网络
池化层(又名:汇聚层),是卷积神经网络的重要组成部分,卷积层和池化层在网络中经常交替使用
池化层的主要作用是降低对卷积层对位置的敏感性,还能一定程度上防止过拟合
在个人理解中,池化层其实是一种特殊的卷积层,卷积层的主要目的是提取和强化检测目标的特征,而池化层的目的是降低训练模型对位置信息的敏感度
例如:一张明星照片,我们一眼就能看出来是哪个明星,当我们将该照片的像素左移一位后,我们这个照片跟刚才的是同一张。但是计算机无法进行判断,此时加入池化层,就可以消减模型对位置信息的敏感程度。
前两章学习的全连接神经网络和卷积神经网络,在处理图片时,只能处理图片的信息,而对每个图片前后的关联信息不敏感。
循环神经网络(Rerrent Neural Network, RNN),RNN对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,利用了RNN的这种能力,使深度学习模型在解决语音识别、语言模型、机器翻译以及时序分析等NLP领域的问题时有所突破。
例如:
我喜欢吃苹果
苹果是一家很棒的公司
上面的两句话人们可以一眼就分辨出,一个代表的是我们平常吃的苹果,另外一个代表的是一家公司。但是机器识别这句话的时候就不能分别出来了,这就需要机器根据语境(文字前后之间的关系)来判断了,而循环神经网络的记忆功能可以很好的满足这个要求。
在此基础之上,建立一个额外的延时单元,就可以形成一个最简单的时延神经网络
自回归模型:通过历史信息来预测自己当前的值
循环神经网络的状态公式
什么是长期依赖
长期依赖是指当前系统的状态,可能受很长时间之前系统状态的影响,是RNN中无法解决的一个问题。
如果从“这块冰糖味道真?”来预测下一个词,是很容易得出“甜”结果的。但是如果有这么一句话,“他吃了一口菜,被辣的流出了眼泪,满脸通红。旁边的人赶紧给他倒了一杯凉水,他咕咚咕咚喝了两口,才逐渐恢复正常。他气愤地说道:这个菜味道真?”,让你从这句话来预测下一个词,确实很难预测的。因为出现了长期依赖,预测结果要依赖于很长时间之前的信息。
如何从数学的角度来理解梯度消失或者爆炸问题呢,我们将以一个简单的、缺少非线性激活函数和输入x的循环神经网络为例。我们可以认为,循环联系为:
3.解决方法
(1)渗透单元及其它多时间尺度的策略
(2)长短期记忆和其它门控RNN
(3)优化长期依赖(截断梯度、引导信息流的正则化)
原文链接:https://blog.csdn.net/qq_28437273/article/details/79656605
与LSTM与RNN相比,LSTM更高级,因为LSTM可以选择性的"忘记"不重要的和有选择地“记住”重要的。而RNN在对较远的输入信息就会遗忘的近似为零了。
LSTM内部主要有三个阶段:
1.忘记阶段。这个阶段主要是对上一个节点传进来的输入进行选择性忘记。简单来说就是会 “忘记不重要的,记住重要的”
2. 选择记忆阶段。这个阶段将这个阶段的输入有选择性地进行“记忆”。主要是会对输入 [公式] 进行选择记忆。哪些重要则着重记录下来,哪些不重要,则少记一些。当前的输入内容由前面计算得到的 [公式] 表示。
3. 输出阶段。这个阶段将决定哪些将会被当成当前状态的输出。主要是通过 [公式] 来进行控制的。并且还对上一阶段得到的 [公式] 进行了放缩(通过一个tanh激活函数进行变化)。
序列模型:输出是连续的,输出的信息是具有前后关联的
序列模型的特点:由于序列模型的数据是具有先后顺序的,可以通过序列前的信息,来判断当前发生的情况。
例如,两个人对话,一个人说:”今天天气真___“,那么通尝试,可以判断接下来因该会说”好“,”不错“,”不好“,等形容词,而不会说,”书包“,”老师“,等词汇。这个就是通过前面的信息,来预测接下来会说什么。
序列模型这一节,主要用到的数学知识是条件概率公式
例如:当知道X1~X(t-)
在处理图片类型的数据时,为了增强训练模型的泛化能力,将图片进行裁剪,拉伸,压缩,改变比例,变色的处理
微调,故名思义,就是把其他人已经训练好的模型拿过来,作为预训练模型,在此基础之上在做改进的方法
虽然在其他人的基础之上进行训练数据集看起来并不是很好,但在由于当前的深度学习发展迅猛,很多训练模型的都是以(万)为单位的,训练模型数量巨大,所以从0开始训练并不明智。
暂时空着
想要成为一名合格的深度学习pytorch框架的工程师,需要具有扎实的基本功,才能编写出,简介、高效的代码。其中有一些独有的编程的注意事项需要注意
矢量化加速,确切的说是在代码编写的时候,刻意的去使用两个向量直接相加的形式。而不是使用for循环,对矢量中的数据进行逐位相加
看下面的两段代码,第一个用的是矢量相加的形式,第二个是用的for循环的形式,运行效率差的可不是一点半点。
嘎嘎重要
import torch
import matplotlib.pyplot as plt
%matplotlib inline
x = torch.arange(0.0,10.0,0.1)
x.requires_grad_(True)
x1 = x.detach()
y1 = torch.sin(x1)
y2 = torch.sin(x)
y2.sum().backward()
plt.plot(x1,y1)
plt.plot(x1,x.grad)
import os#内核挂掉附赠代码
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"#内核挂掉附赠代码,这段代码可以解决包名地的冲突问题
yiled 是python中的一个语句,其最主要的功能是生成一个generator(生成器)。
生成器是什么意思呢,举个下面图片的例子
那么再来说yiled,yiled最经常的使用办法是放在函数中使用,我们之前学过return。当运行函数碰到return时,直接结束函数的运行,同时返回某个值。
yiled也差不多,当运行函数时,碰到yiled,函数就会中止,但是等下一次重新调用这个函数的时候,就会续接刚才的函数继续运行
感觉还是一头雾水吧,下面看一个例子
当进行模型训练的时候,有时我们只是想看一下训练的效果,并不是想通过验证集来更新网络时,就可以使用with torch.no_grad()
reshape(-1),将张量变成一串
reshape(-1,1),将张量变成一列
from torchvision import transforms中的一个函数
可以将图像PLT_image或转化为一个张量的形式,来方便处理
ax.axes.get_xaxis().set_visible(False)
该段代码可以将图像的坐标轴隐藏掉,适用于显示图片,不需要坐标的情况下
没去掉坐标轴的情况:
去掉坐标轴的情况
还有很多还没学完,有关深度学习的基础知识学习,暂时告一段落,因为要开始转战实践了,剩下的慢慢学吧,哈哈
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。