- 博客(51)
- 收藏
- 关注
原创 GPT2代码拆解+生成实例
通常我们的logits是(B,T,C)形式,其实B为batch,T为length,C为channel也就是embd维度,为768,N=BxT,而数据input和target为(B,T)形式,所以target的维度要与shift_logits.view(-1, shift_logits.size(-1))的第一维N一致。在ffd中首先进行emb->emb x 4的转换然后再进行emb x 4->emb的转换。在Attention中首先将输入的embedding经过conv1D将维度变成3。
2023-02-14 01:36:45
2308
原创 Transformer中使用的position embedding为什么是加法而不是concat
transformer中使用的position embedding为什么是加法给每一个位置 xi∈R(d,1)x^{i} \in R^{(d, 1)}xi∈R(d,1) concat 上一个代表位置信息的 one-hot 向量 pi∈R(N,1)p^{i} \in R^{(N, 1)} \quadpi∈R(N,1) (N代表共有 N\mathrm{N}N 个位置)形成 xpi∈R(d+N,1)x_{p}^{i} \in R^{(d+N, 1)}xpi∈R(d+N,1), 它也可以表示为 [[xi]T,[
2022-05-15 23:34:49
2707
2
原创 Pytorch CHATBOT TUTORIAL attention decoder (Luong) 维度变化讲解
在上一篇中介绍了seq2seq for translation中decoder with attention的维度变化,这篇将介绍另一个pytorch教程chatbot中 attention decoder的部分模型架构为传统的seq2seq模型encoder负责将变长的句子转变为固定长度的vector,包括了句子的语义decoder将input word和encoder输出的向量作为输入,每次输出一个output预测这个时间步的输出word,以及一个hidden作为下一次时间步的输入。关于en
2022-03-22 00:38:25
833
原创 Pytorch 教程TRANSLATION WITH A SEQUENCE TO SEQUENCE NETWORK AND ATTENTION (Bahdanau)维度变化讲解
原链接来自pytorch官方教程Attention allows the decoder network to “focus” on a different part of the encoder’s outputs for every step of the decoder’s own outputs.attention可以 让decoder在每个step关注encoder输出vector的不同部分First we calculate a set of attention weights. The
2022-03-21 06:14:35
1957
1
原创 GPT2模型源码阅读系列(四)一Attention
终于到了重头戏Attention类,主要关注点为cross_attention, self_attention, split_head, layer_pastAttention类中的merge_heads()函数用来将多头注意力聚合操作结果张量a的注意力头维度进行合并,令多头注意力聚合操作结果张量a的形状由(batch_size, num_head, 1, head_features)变为(batch_size, 1, all_head_size)split_heads()函数用来对query张量、k
2022-03-16 06:47:23
2060
3
原创 GPT2模型源码阅读系列(三)一Block
在上一篇GPT2模型源码阅读系列(二)一GPT2Model中,调用Block的部分为 outputs = block( hidden_states, layer_past=layer_past, attention_mask=attention_mask, head_mask=head_mask[i],
2022-03-16 06:31:07
2250
1
原创 GPT2模型源码阅读系列(二)一GPT2Model
在GPT2Model类中,模型的主体包含了词嵌入层self.wte位置嵌入层self.wpeDropout层self.drop包含12个Block模块的ModuleList层self.h以及最后的LayerNormalization层self.ln_fGPT2Model类中,会对输入的input_ids张量、token_type_ids张量、position_ids张量、attention_mask张量等进行方面的预处理第一次迭代时,input_ids张量、token_type_i..
2022-03-16 06:05:49
4636
1
原创 GPT2模型源码阅读系列一GPT2LMHeadModel
GPT2论文 Language models are unsupervised multitask learnersGPT2模型结构transformers库中的GPT2模型源码几部分分别为 GPT2LMHeadModel类、GPT2Model类、Block类、MLP类与Attention类其中,一个Transformer的Block类中包含了Attention类与MLP类,而在GPT2Model类中又以Block类为基础构建了12层Block的模型主体结构GPT2LMHeadModel主体为调用
2022-03-15 05:20:33
12136
2
原创 Leetcode 90. 子集 II
相比子集问题,多了一个限制条件就是不能有重复,对应代码部分为先对nums排序,然后在for循环中判断i和startIndex关系,若大于且nums[i] == nums[i-1],则跳过当前选择class Solution: def subsetsWithDup(self, nums: List[int]) -> List[List[int]]: path = [] paths = [] def backtrack(nums, startIn.
2022-01-03 02:39:25
517
原创 Leetcode 78 子集
每次递归先将当前path内的子集添加到pathsclass Solution: def subsets(self, nums: List[int]) -> List[List[int]]: path = [] paths = [] def backtrack(nums, startIndex): paths.append(path[:]) if startIndex == len(nums):.
2022-01-03 02:37:27
3427
原创 Leetcode 131. 分割回文串
base case为开始索引startIndex 大于等于字符串长度,则找到一组答案class Solution: def partition(self, s: str) -> List[List[str]]: path = [] paths = [] def backtrack(s, startIndex): if startIndex >= len(s): paths.app.
2022-01-03 02:34:16
3209
原创 Leetcode 17. 电话号码的字母组合
class Solution: def letterCombinations(self, digits: str) -> List[str]: answers = [] answer = [] letter_map = { '2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', .
2022-01-03 02:32:08
3033
原创 Leetcode 51. N 皇后
思路class Solution: def solveNQueens(self, n: int) -> List[List[str]]: if not n: return [] chessboard = [['.'] * n for _ in range(n)] res = [] def isValid(row, col, chessboard): #检查列 for i in ..
2021-12-12 23:33:51
2075
原创 Leetcode 77 组合
思路class Solution: def combine(self, n: int, k: int) -> List[List[int]]: paths = [] path = [] def backtrack(n, k, start): if len(path) == k: paths.append(path[:]) for i in range(star.
2021-12-07 22:02:28
201
原创 Leetcode 40 组合总和 II
思路来自代码随想录class Solution: def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]: paths = [] path = [] used = [0] * len(candidates) def backtrack(candidates, target, sum_, start_index): .
2021-12-07 21:55:23
1900
原创 Leetcode 39 组合总和
解题思路paths存放最终结果,path用于记录回溯过程中当前的结果backtrack参数sum_记录当前节点达到的和,也就是path的总和另外为了清晰的记录每个组合开始数字的索引,引入start_index,避免重复考虑class Solution: def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: paths = [] path = [.
2021-12-02 20:33:34
1944
原创 Leetcode 47. 全排列 II
解题思路相比46题主要变化在于需要维护一个used数组(位置上的值为0代表当前数字在当前层没有被考虑过或者经过回溯之后已经被考虑过)当前位置的数字没有出现过if not used[i]: 当前位置的数字和前一个一样且前一个数字经过回溯之后已经被考虑则跳过当前的选择 if i>0 and nums[i] == nums[i-1] and not used[i-1]: continueclass Solution: def permuteUni.
2021-12-02 20:18:17
105
原创 Leetcode 46 全排列
path记录排列的过程,如果长度满足3则达到递归终止条件,记录结果并class Solution: def permute(self, nums: List[int]) -> List[List[int]]: res = [] #存放符合条件结果的集合 path = [] #用来存放符合条件的结果 def backtrack(nums): if len(path) == len(nums): .
2021-11-29 16:01:32
1482
原创 Leetcode 98 验证二叉搜索树
辅助函数isBst携带了额外的信息帮助判断是否左节点小于根节点或右节点大于根节点class Solution: def isValidBST(self, root: TreeNode) -> bool: def isBst(root, lower=float('-inf'), upper=float('inf')): if root.val <= lower or upper <= root.val: re.
2021-11-21 16:07:59
94
原创 Leetcode 752 打开转盘锁
解题思路plusOne和minusOne分别用于计算拨动一位之后的密码锁数字,单向bfs中每次取一组数字,初始为‘0000’,然后依次判断是否为deadend或target,都不是则依次进行向上或向下拨动1操作然后加入到待考察队列(q)以及出现过数字的队列(visited),判断结束之后操作步数+1class Solution: def openLock(self, deadends: List[str], target: str) -> int: def plusOne.
2021-11-18 15:57:43
182
原创 Leetcode 563 二叉树的坡度
# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def findTilt(self, root: TreeNode) -> in.
2021-11-18 15:44:37
325
原创 Leetcode 111 二叉树最小深度
分别用BFS和递归求解,BFS每次将一个节点入队,遍历过程中每次将该节点出队并依次判断该节点是否为叶子结点,若是则结束遍历并返回当前深度,若有子节点则将子节点入队然后将当前深度+1继续下一次遍历递归函数定义为考虑以当前root为根节点的二叉树的深度# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = .
2021-11-16 20:35:40
427
原创 Leetcode 337 打家劫舍 III
解题思路在于helper函数的定义,代表了考虑当前房屋(root)之后所能带来的收益,返回值包括了抢(do)与不抢(not do)当前房屋的数值(数组的0和1)如果决定抢当前房屋则不考虑左右节点,如果不抢则分别考虑左右节点中抢与不抢结果大的值,然后相加class Solution: def rob(self, root: TreeNode) -> int: #递归暴力 #考虑root节点带来的最大收益 def helpe.
2021-11-14 02:52:34
2281
原创 Leetcode 213 打家劫舍 II
该题相比上一题增加了限制条件就是房子首尾相连,那么这时需要考虑抢劫的情况有三种:1)不抢首尾的房子;2)只抢首;3)只抢尾(图片来源已注明)这时只需要考虑情况2和3即可,因为包括了情况一class Solution: def rob(self, nums: List[int]) -> int: """ :type nums: List[int] :rtype: int """ n = len(nums).
2021-11-13 00:55:21
387
原创 Leetcode 198 打家劫舍
class Solution: def rob(self, nums: List[int]) -> int: if not nums: return 0 n = len(nums) memo = [-1 for i in range(n)] memo[n - 1] = nums[n - 1] for i in range(n-2, -1, -1): for j in.
2021-11-12 07:23:22
1612
原创 变分自编码器VAE
本文图片和公式统一和原始paper保持一致Auto-Encoding Variational Bayes问题描述考虑数据集 X={x(i)}i=1N\mathbf{X}=\left\{\mathbf{x}^{(i)}\right\}_{i=1}^{N}X={x(i)}i=1N包括 NNN 个 独立的来自连续或离散变量x\mathrm{x}x的样本. 该变量由 z\mathbf{z}z生成,有以下两个步骤z(i)\mathbf{z}^{(i)}z(i) 由先验概率pθ∗(z)p_{\boldsy
2021-11-10 22:17:53
812
原创 LeetCode72.Edit Distance 编辑距离
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)示例 2:输入:word1 = “intention”
2021-09-22 06:12:52
78
原创 Transformer中MultiheadAttention代码实现
值得注意的几个点:词输出维度必须整除head个数以便计算forward中进行转置操作为了后续点乘方便mask只在decoder-enccoder中使用class MultiheadAttention(nn.Module): # n_heads:多头注意力的数量 # hid_dim:每个词输出的向量维度 def __init__(self, hid_dim, n_heads, dropout): super(MultiheadAttention, self)
2021-09-14 18:10:31
1411
原创 自然语言生成评测方法 BLEU, Distinct, F1 代码实现
#!/usr/bin/env python# -*- coding: utf-8 -*- import sysimport mathfrom collections import Counterif len(sys.argv) < 2: print("Usage: " + sys.argv[0] + " eval_file") print("eval file format: pred_response \t gold_response") exit()de
2021-09-08 18:09:01
2522
原创 Expectation Maximization 期望最大算法
目标EM算法是为了找到含有隐变量的模型的最大似然解,Z为隐变量极大似然的对数解如下所示lnp(X∣θ)=ln{∑Zp(X,Z∣θ)}\ln p(\mathbf{X} \mid \theta)=\ln \left\{\sum_{Z} p(\mathbf{X}, \mathbf{Z} \mid \theta)\right\}lnp(X∣θ)=ln{Z∑p(X,Z∣θ)}总体流程我们考虑隐变量在后验分布lnp(Z∣X,θ)\ln p(\mathbf{Z} \mid \mathbf{X}.
2021-07-27 07:28:19
280
原创 融入知识图谱的对话系统论文解读:Thinking Globally, Acting Locally: Distantly Supervised Global-to-Local Knowledge
论文标题:Thinking Globally, Acting Locally: Distantly Supervised Global-to-Local Knowledge Selection for Background Based Conversation该论文主要解决基于背景知识的对话系统中知识选择的问题,引入global-to-local knowledge selection(GLKS)机制,可以选择合适的背景知识生成responseabs给定对话内容和背景知识,首先学习到topic
2021-06-30 19:18:33
802
原创 Latex笔记-表格
code\begin{table}[htbp]\centering\caption{\label{tab}Different Discriminant Directions And AUC Value}\begin{tabular}{cccc} \toprule Discriminant Directions & vector & AUC \\ \midrule Fisher Discriminant & [-1.08, 0.67] &
2021-05-21 05:42:57
218
原创 Latex笔记-脚注
用法xxxx \footnote{url}example\footnote{https://scikit-learn.org/stable/modules/generated/sklearn.kernel_ridge.KernelRidge.html#sklearn.kernel_ridge.KernelRidge}.
2021-05-21 04:05:11
615
原创 LDA主题模型系列(二)求解之Gibbs采样
本系列分为三部分:LDA基本概念LDA求解之Gibbs采样LDA求解之变分推断EM算法该篇为LDA求解之Gibbs采样对于Gibbs采样不了解的可以参考这里回顾LDA模型
2021-05-05 21:48:56
961
原创 LDA主题模型系列(一)基本概念
本系列分为三部分:LDA基本概念LDA求解之Gibbs采样LDA求解之变分推断EM算法将参考刘建平老师的系列博客模型概念图:第一次看到这张图可能会有些懵,逐步拆解:一左一右分别代表两个狄利克雷分布的参数左边第一步:根据proportions parameter α\alphaα (分布的超参数,是一个 KKK 维向量)生成D个代表文档主题分布的狄利克雷分布θd=Dirichlet(α⃗)\theta_{d}=\operatorname{Dirichlet}(\vec{\alph
2021-05-03 03:12:32
567
原创 马尔可夫蒙特卡洛(MCMC)-从平稳分布,细致平衡到Metropolis-Hastings和Gibbs采样
Metropolis-Hastings
2021-05-01 05:46:33
2931
8
原创 维特比算法在HMM和CRF中的应用
背景维特比算法是一个通用的解码算法,是基于动态规划的求序列最短路径的方法。一般应用场景为HMM(隐马尔可夫模型)中的解码(decoding)问题,在HMM模型的解码问题中,给定模型 λ=(A,B,Π)\lambda=(A, B, \Pi)λ=(A,B,Π) 和观测序列 O={o1,o2,…oT}O=\left\{o_{1}, o_{2}, \ldots o_{T}\right\}O={o1,o2,…oT}, 求给定观测序列OOO的条件下, 最可能出现的对应的状态序列 I∗={i1∗,i2∗,…iT
2021-04-30 07:01:32
438
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人