深度学习
文章平均质量分 80
海晨威
Growth is a song
展开
-
超细节的 BatchNorm/BN/LayerNorm/LN 知识点
1、BN在训练和测试时的差异2、BN中的移动平均 Moving Average是怎么做的3、移动平均中 Momentum 参数的影响4、Norm中的标准化、平移和缩放的作用5、不同Norm方法中都有哪些参数要保存6、BN和LN 有哪些差异7、为什么BERT使用LN,而不使用BN8、如何去理解在哪一个维度做Norm原创 2022-05-29 11:49:03 · 804 阅读 · 1 评论 -
BN/Batch Norm中的滑动平均/移动平均/Moving Average
整个训练阶段滑动平均的过程,(moving_mean, moving_var) 参数实际上是从正态分布,向训练集真实分布靠拢的一个过程。原创 2022-05-04 20:46:13 · 2028 阅读 · 2 评论 -
超细节的对比学习和SimCSE知识点
2020年的Moco和SimCLR等,掀起了对比学习在CV领域的热潮,2021年的SimCSE,则让NLP也乘上了对比学习的东风。下面就尝试用QA的形式挖掘其中一些细节知识点,去更好的理解对比学习和SimCSE。1、如何去理解对比学习,它和度量学习的差别是什么?2、对比学习中一般选择一个batch中的所有其他样本作为负例,那如果负例中有很相似的样本怎么办?3、infoNCE loss 如何去理解,和CE loss有什么区别?4、对比学习的infoNCE loss 中的温度常数的作用是什么?5、S原创 2021-08-24 22:56:41 · 2139 阅读 · 6 评论 -
深度学习中的轴/axis/dim全解
在深度学习中,轴,指的就是张量的层级,一般通过参数axis/dim来设定。很多张量的运算、神经网络的构建,都会涉及到轴,但到底取哪个轴,却不是那么容易把握。下面会针对轴/axis/dim,基于 Pytorch 的代码和实例,尝试去理清张量运算中轴/axis/dim的设定。轴的概念对于一个张量,它的shape有几维,就对应有几个轴,也就对应着张量的层级,最直观的可以通过看最前面的方括号数量来判断。import torcha = torch.Tensor([[1,2,3], [4,5,6]])b =原创 2020-09-13 09:33:20 · 3160 阅读 · 0 评论 -
代码可直接运行:利用深度学习进行股票预测,支持pytorch,keras和tensorflow
博主路一瓢的博文,让人受益匪浅。但博主提供的代码有一些bug,无法直接运行,经过本人的多番调试,已能完整运行,需要修改的路径问题也已经在代码中给出了注释,希望能在深度学习的路上给大家带来一些帮助。原创 2017-11-12 19:07:08 · 50709 阅读 · 407 评论 -
一幅图理解LSTM的物理结构
下图是我看过对LSTM物理结构描述最清楚的图,参考自LSTM神经网络输入输出究竟是怎样的?答主在图中对三种架构有简要的说明,这里根据自己的理解,再对它做进一步的解释。图中的第一部分是LSTM的时序结构版本,它是单个LSTM Cell在多个时间步上展开的形式,实际上是只有一个Cell,因此也可以理解为LSTM是神经网络在时序上的权重共享(CNN是在空间上的权重共享)。嗯,单个LSTM/RNN是...原创 2019-10-29 21:28:23 · 1673 阅读 · 0 评论 -
Embedding理解与代码实现
Embedding 字面理解是 “嵌入”,实质是一种映射,从语义空间到向量空间的映射,同时尽可能在向量空间保持原样本在语义空间的关系,如语义接近的两个词汇在向量空间中的位置也比较接近。下面以一个基于Keras的简单的文本情感分类问题为例解释Embedding的训练过程:首先,导入Keras的相关库from keras.layers import Dense, Flatten, Inputf...原创 2018-12-19 16:39:49 · 29870 阅读 · 3 评论 -
语言模型困惑度的两种形式及python实现
在自然语言处理中,对于一个语言模型,一般用困惑度来衡量它的好坏,困惑度越低,说明语言模型面对一句话感到困惑的程度越低,语言模型就越好。在网上关于语言模型困惑度的介绍文章中,一般会看到以下两种形式:实际上两种形式是一样的,只不过是不一样的表达:对于左边的式子,两边取对数之后,再反解出 PP(S) 就可以得到右式的结果。上面式子中的 S 就是一句话,N 是这句话的长度,如果是中文,那就是分词...原创 2019-02-27 17:41:40 · 7324 阅读 · 10 评论 -
通过梯度下降和牛顿法求解一个数的平方根
梯度下降梯度下降法(Gradient descent)是一个一阶最优化算法,就是让参数沿着损失函数负梯度的方向更新。迭代的步长,也就是学习率是事先给定的,如果负梯度的绝对值越大,这次更新的幅度也会越大,越接近极值点时,负梯度会越小,这时更新就会较慢。牛顿法牛顿法是一个二阶最优化算法,它将损失函数进行二阶展开,因此会涉及到二阶导对应的海森矩阵。它的更新速度很快,但计算复杂度较高,主要是要求解海...原创 2019-05-23 09:52:40 · 3973 阅读 · 2 评论 -
TensorFlow和Keras的模型保存及载入模型参数继续训练
Keras在之前训练的基础上,加载参数继续训练,就像加载参数进行预测一样:首先在模型训练好之后进行模型的保存:def save(self): self.actor.save_weights('model/ddpg_actor.h5') self.critic.save_weights('model/ddpg_critic.h5')当然,直接使用 model.save(‘...原创 2019-04-26 21:33:31 · 8376 阅读 · 0 评论 -
BN和Dropout在训练和测试时的差别
Batch NormalizationBN,Batch Normalization,就是在深度神经网络训练过程中使得每一层神经网络的输入保持相近的分布。BN训练和测试时的参数是一样的嘛?对于BN,在训练时,是对每一批的训练数据进行归一化,也即用每一批数据的均值和方差。而在测试时,比如进行一个样本的预测,就并没有batch的概念,因此,这个时候用的均值和方差是全量训练数据的均值和方差,这个可...原创 2019-04-07 16:19:01 · 22837 阅读 · 11 评论 -
通过数据生成器解决大文件无法一次性载入内存训练的问题
通过数据生成器解决大文件无法一次性载入内存训练的问题from keras.models import Modeldef process_line(line): tmp = [float(val) for val in line.strip().split(',')] x = np.array(tmp[:-1]) y = np.array(tmp[-1:]) r...原创 2019-02-12 22:04:34 · 3196 阅读 · 0 评论 -
从控制中的反馈角度理解循环神经网络
反馈是控制理论中最经典的思想,PID方法即基于此,下面是PID的结构图。下面是PID公式:e=r−ye=r-ye=r−yu(n)=Kpe(n)+Ki∑i=0n(e(i))+Kd(e(n)−e(n−1))u(n)=K_{p}e(n)+K_{i}\sum_{i=0}^{n}(e(i))+K_{d}(e(n)-e(n-1))u(n)=Kpe(n)+Kii=0∑n(e(i))+Kd(e(n...原创 2018-12-25 11:20:30 · 996 阅读 · 0 评论