paper&leetcode,二叉树遍历

Posted NLPer项目算法实战

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了paper&leetcode,二叉树遍历相关的知识,希望对你有一定的参考价值。

一:OpenAI,由诸多硅谷大亨联合建立的人工智能非营利组织。2015年马斯克与其他硅谷科技大亨进行连续对话后,决定共同创建OpenAI,希望能够预防人工智能的灾难性影响,推动人工智能发挥积极作用。


二:Zero-shot learning 指的是我们之前没有这个类别的训练样本。但是我们可以学习到一个映射X->Y。如果这个映射足够好的话,我们就可以处理没有看到的类了。  比如,我们在训练时没有看见过狮子的图像,但是我们可以用这个映射得到狮子的特征。一个好的狮子特征,可能就和猫,老虎等等比较接近,和汽车,飞机比较远离。感性认识的话,虽然我们不知道这东西叫狮子,但是我们可以说出他和谁谁谁像。(生物学家第一次看到鸭嘴兽的感觉。)


三:在得到不同的语言模型(一元语言模型、二元语言模型....)的时候,我们如何判断一个语言模型是否好还是坏,一般有两种方法:

1、一种方法将其应用到具体的问题当中,比如机器翻译、speech recognition、spelling corrector等。然后看这个语言模型在这些任务中的表现(extrinsic evaluation,or in-vivo evaluation)。但是,这种方法一方面难以操作,另一方面可能非常耗时,可能跑一个evaluation需要大量时间,费时难操作。

2、针对第一种方法的缺点,大家想是否可以根据与语言模型自身的一些特性,来设计一种简单易行,而又行之有效的评测指标。于是,人们就发明了perplexity这个指标。


四:困惑度(perplexity)的基本思想是:给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好,公式如下:


五:嘻哈说唱中经常听到rapper说skrr这个词,其实说唱中Skrt一般用来形容汽车甩尾(漂移)发出的轮胎摩擦音,在Trap里面用来象征,甩开,抛弃,逃离等意思。另外skrt可以作语气词,表示激动,兴奋。


六:请问计算机视觉里的消融实验(ablation experiment)是什么意思?

比如说这篇文章有3个亮点,这一章就负责告诉你我只加a结果如何,只加b结果如何,a和b都加了又如何

就是相当于高中的控制变量法,哈哈,看各因素带来的影响


七:看到有人对flops有疑惑,先捋清这个概念。FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。网上打字很容易全小写,造成混淆,本问题针对模型,应指的是FLOPs。以下答案不考虑activation function的运算。


八:

1、ELECTRA是BERT推出这一年来我见过最赞的idea,它不仅提出了能打败MLM的预训练任务,更推出了一种十分适用于NLP的类GAN框架。

2、另外要注意的一点是,在优化判别器时计算了所有token上的loss,而以往计算BERT的MLM loss时会忽略没被mask的token。作者在后来的实验中也验证了在所有token上进行loss计算会提升效率和效果。

3、作者认为生成器对embedding有更好的学习能力,因为在计算MLM时,softmax是建立在所有vocab上的,之后反向传播时会更新所有embedding,而判别器只会更新输入的token embedding。最后作者只使用了embedding sharing。

4、生成器的大小在判别器的1/4到1/2之间效果是最好的。作者认为原因是过强的生成器会增大判别器的难度(判别器:小一点吧,我太难了)。

5、由于ELECTRA是判别式任务,不用对整个数据分布建模,所以更parameter-efficient。

6、BERT虽然对上下文有很强的编码能力,却缺乏细粒度语义的表示,这是把token编码降维后的效果,可以看到sky和sea明明是天与海的区别,却因为上下文一样而得到了极为相似的编码。


九:模型蒸馏落地就要落实到损失函数的修改上,剪枝这里可以分为weight pruning(WP)和structured pruning(SP),只将LayerDrop应用在训练过程中还有提升效果的奇效,而且能提升一定的训练速度。


10:对比学习的核心思想,就是让模型学习如何将正样本和其他负样本区别开来,抓住样本的本质特征,而不是把每个细节都考虑到。

1、在自监督的情况下,对比学习利用数据增强方法,给每个输入样本输入构建另一个view 作为正例,并使用同batch下其他样本作为负例,达到拉近正例拉开负例的“对比”目的

2、监督数据作者则提出了一个新的对比学习loss SCL,将同一类的样本互相作为正例,不同类别的作为负例。以此达到拉近类内样本、拉开类间距离的目的。


11:

1、多模态学习,CLIP的全称是Contrastive Language–Image Pre-training,OpenAI从网上搜集了400million未清洗的图像-文本pair数据,用对比学习目标进行训练:分别对图像和文本编码,然后两两计算cosine相似度,再针对每个图片的一行或文本的一列进行分类,找出匹配的正例,说CLIP是图像的GPT-2,但还是有些区别的,GPT-2是生成模型,而CLIP是判别模型。

2、OpenAI的DALLE模型,直接通过文字描述生成图片。


#########################################前序遍历########## 方法一迭代:# 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 = right

class Solution: def preorderTraversal(self,root:TreeNode): if not root:return [] stack,res=[root],[] while stack: node=stack.pop() if node: res.append(node.val) if node.right: stack.append(node.right) if node.left: stack.append(node.left) return res
########## 方法二迭代模板:# 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 = right

class Solution: def preorderTraversal(self,root:TreeNode): if not root:return [] cur,stack,res=root,[],[] while cur or stack: while cur: res.append(cur.val) stack.append(cur) cur=cur.left tmp=stack.pop() cur=tmp.right return res

##############方法三递归# 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 = right

class Solution: def preorderTraversal(self, root: TreeNode): res = [] def dfs(root): if not root:return res.append(root.val) dfs(root.left) dfs(root.right) dfs(root) return res
#########################################中序遍历#方法一迭代模板class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right

class Solution: def inorderTraversal(self,root:TreeNode): if not root: return [] cur, stack, res = root, [], [] while cur or stack: while cur: stack.append(cur) cur = cur.left tmp = stack.pop() res.append(tmp.val) cur = tmp.right
return res
#方法二递归class TreeNode: def __init__(self,val=0,left=None,right=None): self.val=val self.left=left self.right=right
class Solution: def inorderTraversal(self,root:TreeNode): res=[] def dfs(root): if not root:return dfs(root.left) res.append(root.val) dfs(root.right) dfs(root) return res


#########################################后序遍历#方法一迭代
# 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 = right

class Solution: def postorderTraversal(self,root:TreeNode): if not root:return [] stack,res=[root],[] while stack: node=stack.pop() if node: if node.right: stack.append(node.right) if node.left: stack.append(node.left) res.append(node.val) return res



#方法二迭代模板# 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 = right

class Solution: def postorderTraversal(self,root:TreeNode): if not root: return [] stack, res = [(0,root)], [] while stack: flag,node=stack.pop() if not node:continue if flag==1: res.append(node.val) else: stack.append((1,node)) stack.append((0,node.right)) stack.append((0,node.left)) return res
#方法三递归class TreeNode: def __init__(self,val=0,left=None,right=None): self.val=val self.left=left self.right=right

class Solution: def postorderTraversal(self,root:TreeNode): res=[] def dfs(root): if not root:return dfs(root.left) dfs(root.right) res.append(root.val)
dfs(root) return res
#########################################层次遍历# encoding=utf-8class TreeNode: def __init__(self,x): self.val=x self.left=None self.right=None
#pop(0) 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。这里代表第一个元素,完全可以用来模拟队列#pop()默认最后一个元素,完全可以用来买模拟栈class Solution: def levelOrder(self,root:TreeNode): if not root:return []
res,q=[],[root] while q: level=[] for i in range(len(q)): node=q.pop(0) level.append(node.val) if node.left: q.append(node.left) if node.right: q.append(node.right) res.append(level) return res




以上是关于paper&leetcode,二叉树遍历的主要内容,如果未能解决你的问题,请参考以下文章

paper&leetcode,二叉树遍历

LeetCode根据二叉树创建字符串&&二叉树的构建以及遍历(递归)

二叉树镜像问题——Offer. 27&28

数据结构二叉树链式结构的实现

LeetCode 101. 对称二叉树

LeetCode 101. 对称二叉树