自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

海晨威

Growth is a song

  • 博客(118)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 海晨威文章内容总结

写文章有段时间了,但内容比较杂,想到啥写啥。这次文章就做一个归类总结,方便小伙伴系统的看这些内容。

2022-12-30 22:26:16 356 1

原创 超细节的 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 737 1

原创 BN/Batch Norm中的滑动平均/移动平均/Moving Average

整个训练阶段滑动平均的过程,(moving_mean, moving_var) 参数实际上是从正态分布,向训练集真实分布靠拢的一个过程。

2022-05-04 20:46:13 1864 2

原创 BERT如何解决一词多义问题

对于同一个词,不同的上下文会让这个词融合不同的语义信息,使得同一个词在不同的上下文中有不同的embedding,去表征不同的语义,从而区分一词多义。

2022-02-27 17:44:24 2418

原创 对话文本摘要概述

文本摘要是NLP领域一个重要的任务,它以凝练的语句去描述原始文本中的主要信息。文本的形式是多种多样的,其中,对话文本是人们在不同交流场景下产生的交互式文本。提取对话中的主要信息,在实际应用中可以减少人理解的时间,也可以更好地辅助后续可能的任务。本篇文章会探究对话文本的特点和对话摘要的实现,基于三个不同的对话场景(会议、医患沟通、客服对话),分别介绍一篇有代表性的近期顶会paper,并在最后总结不同对话文本特点对应的解决方案。引言当前,对文本摘要的研究主要集中在新闻领域,而从广泛的对话文本(包括会议、访

2021-11-30 23:15:57 2320

原创 NLP神经网络模型训练时,不同batch可以padding到不同长度嘛?

同一个batch内要padding到一样长度,不同batch之间可以不一样这一点,对于 (绝大多数) NLP模型都是这样的同一个batch内要padding到一样长度神经网络,内部大都是矩阵的运算,batch训练,需要矩阵输入因此一个batch要padding到一样的长度,才能形成一个矩阵,像[[1,2], [3,4,5]]它并不是一个矩阵,矩阵需要每个维度的长度一样才行不同batch之间可以不一样一般batch个句子经过embedding层之后,它的维度会变成 [batch_size,

2021-10-16 14:54:01 1535

原创 超细节的对比学习和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 1882 6

原创 世界上本没什么Embedding,有的只是One Hot

为什么 Bert 的三个 Embedding 可以进行相加?这是一个非常有意思的问题,苏剑林老师也给出了回答:Embedding的数学本质,就是以one hot为输入的单层全连接。也就是说,世界上本没什么Embedding,有的只是one hot。这里再从三个角度去理解一下第一,Embedding 就是以one hot为输入的单层全连接Embedding 矩阵就是全连接中间的参数one-hot中 1 所在位置连接的参数就是对应的 Embedding 向量第二,回到问题本身,为什么 Ber

2021-05-30 20:00:53 671

原创 史上最细节的自然语言处理NLP/Transformer/BERT/Self Attention面试问题与答案

这是我花费了两个周末整理和筛选的,可能是史上最细节的自然语言处理NLP面试问题与(部分)答案啦,主要聚焦目前处于NLP舞台中央的Transformer/BERT/后BERT/Self Attention。筛选的问题会深入到算法/模型更细节的地方,而尽量避免大而泛的问题。本文希望能帮助你对Transformer/BERT的理解再深一层,而这也要求你对上面的算法/模型有基本的认识,主要包括这两部分(后BERT的模型可以自行查找):1、论文:论文是最一手的资源,没有各方解读的杂音Transformer:

2021-01-31 20:25:25 1896 3

原创 超细粒度分析 XLNet 中神奇的 Attention Mask

BERT后时代,XLNet 在20个任务上超越BERT,引起不小的关注。最重要的改进是 XLNet 实现了不在输入中加[Mask] 标志,同样可以利用上下文信息,解决了BERT预训练和微调不一致的问题。1、XLNet如何实现在不加 [Mask] 情况下利用上下文信息呢?XLNet 通过 Permutation Language Modeling (PLM) 重排输入文本,使得当前词的下文也有可能出现在当前词的「上文」中,而实际的操作不是通过改变文本输入顺序来实现,而是依靠关键的 Attention M

2020-11-29 12:58:46 1189

原创 超细节的 Self-Attention 知识点 - 附源码解析

在当前的NLP领域,Transformer/BERT已然成为基础应用,而 Self-Attention 则是两者的核心部分,下面尝试用Q&A和源码的形式深入 Self-Attention 的细节。Q&A1、 Self-Attention 的核心是什么?Self-Attention的核心是用文本中的其它词来增强目标词的语义表示,从而更好的利用上下文的信息。2、Self-Attention 的时间复杂度是怎么计算的?Self-Attention时间复杂度:O(n2⋅d)O(n^2 \c

2020-10-24 10:25:50 2703 4

原创 深度学习中的轴/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 3076

原创 NLP中Mask全解

Mask 在NLP中是一个很常规的操作,也有多种应用的场景和形式,下面尝试从以下几个方面去全(用了夸张的修辞手法)解Mask,并尽可能地辅以图片说明和代码解释:Mask的作用:处理非定长序列RNN中的MaskAttention中Mask防止标签泄露Transformer中的MaskBERT中的MaskXLNet中的MaskMask的作用对于NLP中mask的作用,先上结论:1、padding mask:处理非定长序列,区分padding和非padding部分,如在RN

2020-08-15 15:20:33 3331 5

原创 超细节的BERT/Transformer知识点

随着NLP的不断发展,对BERT/Transformer相关知识的研(mian)究(shi)应(ti)用(wen),也越来越细节,下面尝试用QA的形式深入不浅出BERT/Transformer。1、Transformer在哪里做了权重共享,为什么可以做权重共享?2、Self-Attention 的时间复杂度是怎么计算的?3、不考虑多头的原因,self-attention中词向量不乘QKV参数矩阵,会有什么问题?4、为什么BERT选择mask掉15%这个比例的词,可以是其他的比例吗?5、为什么BE

2020-08-09 15:04:51 1101

原创 NLP中各框架对变长序列的处理全解

在NLP中,文本数据大都是变长的,为了能够做batch的训练,需要padding到相同的长度,并在实际训练中忽略padding部分的影响。在不同的深度学习框架中,对变长序列的处理,本质思想都是一致的,但具体的实现方式有较大差异,下面针对Pytorch、Keras和TensorFlow三大框架,以LSTM模型为例,说明各框架对NLP中变长序列的处理方式和注意事项。Pytorch在pytorch中,是用的torch.nn.utils.rnn中的 pack_padded_sequence 和 pad_pac

2020-07-26 11:29:47 1766

原创 win10下怎么用微软拼音输入直角引号「」『』和其他特殊符号

在文案写作中,「直角引号」是一个小清新的存在,简约美观,甩 “双引号” 一条街,但不容易打出来,下面就介绍一下怎么用微软拼音打出「直角引号」。step1:首先要检查一下U模式输入是否处于开启状态,一般情况都是开启的。顺序为设置→时间和语言→区域和语言→中文(中华人民共和国)→选项→微软拼音→选项→高级→U模式输入。 step2:在任意文档中,在中文输入法下,敲下:uu,进入U模式输入,如...

2020-07-12 09:59:50 31910 8

原创 n个矩形的重叠面积问题及其变种-python实现

问题:平面上有n个平行于坐标轴的矩形,他们总的覆盖面积是多少?重叠的面积只算一次最佳参考:https://blog.csdn.net/u013480600/article/details/39503023上面参考博客的讲解非常好,就是有点小错误,改正后的思路如下:假设输入的矩阵中共有num1个不同的x坐标和num2个不同的y坐标,那么整个二维平面就被分割成了(num1-1)*(num2-...

2020-07-11 20:44:25 5275 5

原创 一幅图理解LSTM的物理结构

下图是我看过对LSTM物理结构描述最清楚的图,参考自LSTM神经网络输入输出究竟是怎样的?答主在图中对三种架构有简要的说明,这里根据自己的理解,再对它做进一步的解释。图中的第一部分是LSTM的时序结构版本,它是单个LSTM Cell在多个时间步上展开的形式,实际上是只有一个Cell,因此也可以理解为LSTM是神经网络在时序上的权重共享(CNN是在空间上的权重共享)。嗯,单个LSTM/RNN是...

2019-10-29 21:28:23 1623

原创 Python实现-BIT*-Batch Informed Tree 运动规划算法

RRT系列的采样规划算法,其随机采样特性可以有效解决维度灾难的问题RRT*通过改进RRT的节点扩展方式,加入重连的机制,可以实现路径质量的渐近最优BIT*结合了采样规划算法和搜索规划算法的优势,引入节点排序和边排序,在超椭球子集中执行排序搜索,可以避免将无价值的节点和边加入到生成树中,下面是BIT*的伪代码伪代码参考文献:J. D. Gammell, S. S. Srinivasa, ...

2019-10-29 21:13:30 3799 6

原创 三维异面直线的距离和垂足求解

在论文中遇到了求解三维异面直线的距离和垂足的问题,网上资源参差不齐,遂把它记录下来,万一你也用得上呢本文参考自:求3维度空间异面直线的垂足点在此基础上做了更详细的论述、扩展和python实现题设:假设有两条直线 L1,L2 ,以及两条直线的方向向量V1,V2,求其最短距离及其垂足。直接求距离对于最短距离,也即两异面直线公垂线的长度,有一个方便快捷的求解方法,选择L1上任意一点P1连接L2...

2019-09-27 20:57:06 3202 3

原创 两种方式判断有向图是否有环-python实现

两种方式判断有向图是否有环-python实现1. DFS判断有向图是否有环假设图以邻接矩阵表示,一条深度遍历路线中如果有结点被第二次访问到,那么有环。我们用一个变量来标记某结点的访问状态(未访问,访问过,其后结点都被访问过),然后判断每一个结点的深度遍历路线即可。def dfs(G,i,color): r = len(G) color[i] = -1 have_cir...

2019-09-27 20:41:13 15137 5

原创 链表的快排和归并排序

链表快排对一个单链表用快排的方式排序快排的关键在于partition函数,因为单链表是不能倒序遍历的,因此不能通过头尾双指针向内夹的partition函数,而是用都是从头开始的双指针方式,具体的两种partition函数可以参考:快排的两种partition函数这里链表快排和数组快排partition函数中关键的不同点在于:partition函数中遍历结束的方式,和递归结束的方式# 链表快...

2019-08-31 19:45:27 784

原创 快排的两种partition函数

partition函数就是快排的关键部分,作用是将数组划分成两部分,左边小于基数,右边大于基数但实际上它也不仅仅用于快排,在求top(K)问题中也常常会用到。下面介绍两种partition函数,他们都是双指针的方法,但具体会有差异:函数一:头尾指针向中间夹def partition(array,left,right): baseNumber = array[left] # 基数的位...

2019-08-31 19:43:12 2542

原创 LeetCode之Unique Binary Search Trees I and II python解法

LeetCode之Unique Binary Search Trees I and II python解法题:Unique Binary Search Trees IGiven n, how many structurally unique BST’s (binary search trees) that store values 1 … n?Example:Input: 3Outpu...

2019-07-27 14:43:29 328

原创 背包问题-三种动态规划解法-逐步减少空间复杂度

题目描述:有编号分别为1,2,3,4,5的五件物品,它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?背包问题是典型的动态规划问题,也有一定的规律可循,通常采用自底向上的方式,先解决小问题,并存储,再解决大问题。方法一:时间空间都为O(n^2)的解法,但可以得到最大价值情况下拿了哪些东西这里dp[i]...

2019-07-05 23:24:44 5151 2

原创 LeetCode之Reverse Linked List II-python递归解法

题:Reverse a linked list from position m to n. Do it in one-pass.Note: 1 ≤ m ≤ n ≤ length of list.Example:Input: 1->2->3->4->5->NULL, m = 2, n = 4Output: 1->4->3->2->5-&...

2019-06-15 11:31:06 636

原创 LeetCode之Word Break-动态规划python解法

Word Break LeetCode 139Given a non-empty string s and a dictionary wordDict containing a list of non-emptywords, determine if s can be segmented into a space-separated sequence of one or more dictio...

2019-06-02 11:50:25 655

原创 LeetCode之排列[ Permutations ] 组合[ Combinations ]与实现[ Python ]

leetcode中有两道经典的题目,求一个数组的排列和组合,都可以用深度优先递归搜索的方式来求解,让我们一起来look look。排列[ Permutations ]题:Given a collection of distinct integers, return all possible permutations.Example:Input: [1,2,3]Output:[ [1...

2019-05-28 21:32:16 1287

原创 通过梯度下降和牛顿法求解一个数的平方根

梯度下降梯度下降法(Gradient descent)是一个一阶最优化算法,就是让参数沿着损失函数负梯度的方向更新。迭代的步长,也就是学习率是事先给定的,如果负梯度的绝对值越大,这次更新的幅度也会越大,越接近极值点时,负梯度会越小,这时更新就会较慢。牛顿法牛顿法是一个二阶最优化算法,它将损失函数进行二阶展开,因此会涉及到二阶导对应的海森矩阵。它的更新速度很快,但计算复杂度较高,主要是要求解海...

2019-05-23 09:52:40 3849 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 8339

原创 BN和Dropout在训练和测试时的差别

Batch NormalizationBN,Batch Normalization,就是在深度神经网络训练过程中使得每一层神经网络的输入保持相近的分布。BN训练和测试时的参数是一样的嘛?对于BN,在训练时,是对每一批的训练数据进行归一化,也即用每一批数据的均值和方差。而在测试时,比如进行一个样本的预测,就并没有batch的概念,因此,这个时候用的均值和方差是全量训练数据的均值和方差,这个可...

2019-04-07 16:19:01 22647 11

原创 算法思想中的两点法和滑动窗口法及python实例

两点法(Two Pointer Approach),也就是双指针法,它一般可以把复杂度从穷举法的O(n^2)减小到O(n)两点法非常有用,很多问题都可以用,如快慢指针,还有求排序数组中的两数和问题两点法对应了两个指针,左右指针之间也就是一个窗口,当左右指针变化时,也就对应着窗口的滑动。所以实际上滑动窗口法是属于两点法的。滑动窗口法(Sliding Window)一般是通过左右指针的变化使窗口...

2019-03-10 15:04:37 6575 1

原创 语言模型困惑度的两种形式及python实现

在自然语言处理中,对于一个语言模型,一般用困惑度来衡量它的好坏,困惑度越低,说明语言模型面对一句话感到困惑的程度越低,语言模型就越好。在网上关于语言模型困惑度的介绍文章中,一般会看到以下两种形式:实际上两种形式是一样的,只不过是不一样的表达:对于左边的式子,两边取对数之后,再反解出 PP(S) 就可以得到右式的结果。上面式子中的 S 就是一句话,N 是这句话的长度,如果是中文,那就是分词...

2019-02-27 17:41:40 7187 10

原创 通过数据生成器解决大文件无法一次性载入内存训练的问题

通过数据生成器解决大文件无法一次性载入内存训练的问题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 3152

原创 AdaBoost、GBDT、RF、XGboost、lightGBM的对比分析

文章目录AdaBoostGBDTRandom ForestXGboostLightGBM对比分析AdaBoost简单介绍AdaBoost是基于boosting的思想,通过多个弱分类器的线性组合来得到强分类器,训练时重点关注被错分的样本,准确率高的弱分类器权重大。更深一步的介绍在训练过程中,它不改变所给的训练数据,而是不断改变训练数据权值的分布,使得被误分类的数据再后一轮的分类中受到更大的...

2019-01-31 23:09:56 3747 1

原创 pandas中遍历dataframe的每一个元素

假如有一个需求场景需要遍历一个csv或excel中的每一个元素,判断这个元素是否含有某个关键字那么可以用python的pandas库来实现。方法一:pandas的dataframe有一个很好用的函数applymap,它可以把某个函数应用到dataframe的每一个元素上,而且比常规的for循环去遍历每个元素要快很多。如下是相关代码:import pandas as pddata = [[...

2019-01-27 20:27:50 31437 3

原创 python实现统一形式的二叉树前中后序非递归遍历

对于二叉树的遍历,递归形式非常简单,可以很快写出来,而对于非递归的形式,在不熟的情况下,还是需要一番思考的,因为二叉树的非递归遍历并没有一个统一的形式方便理解和记忆,对于前序和中序非递归遍历,还算统一,而一般的非递归后序遍历,和前两者有很大的差异。参考python实现二叉树和它的七种遍历,给出一般形式的非递归前中后序遍历:一般形式的非递归前中后序遍历 def front_stack(self...

2018-12-31 11:36:36 1149

原创 从控制中的反馈角度理解循环神经网络

反馈是控制理论中最经典的思想,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)=Kp​e(n)+Ki​i=0∑n​(e(i))+Kd​(e(n...

2018-12-25 11:20:30 957

原创 Embedding理解与代码实现

Embedding 字面理解是 “嵌入”,实质是一种映射,从语义空间到向量空间的映射,同时尽可能在向量空间保持原样本在语义空间的关系,如语义接近的两个词汇在向量空间中的位置也比较接近。下面以一个基于Keras的简单的文本情感分类问题为例解释Embedding的训练过程:首先,导入Keras的相关库from keras.layers import Dense, Flatten, Inputf...

2018-12-19 16:39:49 29737 3

原创 推荐系统介绍

推荐系统推荐系统是一种信息过滤系统,为了解决信息过载问题系统组成一般包括日志系统,推荐算法和内容展示UI其中推荐算法为核心,它一般又可以分为三层:基础层,推荐(召回)层,排序层。基础层为召回层提供特征,召回层为排序层提供候选集,排序层输出排序后的推荐结果。上图参考自:微博推荐系统介绍基础层主要通过NLP、CV、知识图谱等技术构造特征,推荐(召回)层基于用户历史行为数据信息,特征信息等...

2018-12-16 11:21:35 2470

绝对可行的PRM路径规划matlab代码

绝对能运行的matlab路径规划PRM代码,该代码给出了二维环境下,机器人的路径规划方法——概率路图法(PRM),并附有文档简单说明

2018-05-26

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除