Bayesian Personalized Ranking Loss

BPR的思想是给定一个由用户,正向物料,随机采样的负向物料组成的三元组 (ui,ti+,ti)\left(u_i, t_{i+}, t_{i-}\right) ,针对用户 uiu_i 的正确排序(将 ti+t_{i+} 排在 tit_{i-} 前面)的概率是 PConectorder =sigmoid(uiti+uiti)P_{\text {Conectorder }}=\operatorname{sigmoid}\left(\boldsymbol{u}_{\boldsymbol{i}} \cdot \boldsymbol{t}_{i+}-\boldsymbol{u}_{\boldsymbol{i}} \cdot \boldsymbol{t}_{i-}\right) ,BPR Loss就是要 :-> 将这一正确排序的概率最大化。
由于 PCorrectorder P_{\text {Correctorder }} 对应的真实label永远是1,因此将 PCorrectorder P_{\text {Correctorder }} 代入Binary Cross-Entropy的公式,得到BPR Loss如公式(5-14)所示,符号含义参考公式(5-13)。


向量化召回统一建模框架

如何定义正样本,即哪些q和t在向量空间内应该相近;

  • 取决于不同的召回场景

    • I2I召回。 q 和 t 是物料。 #card

      • 比如我们认为同一个用户在同一个会话(session,间隔时间较短的用户行为序列)交互过(例如点击,观看,购买等)的两个物料,在向量空间是相近的。这体现的是两个物料的相似性。
    • U2I召回。 qq 是用户,tt 是物料。#card

      • 一个用户与其交互过的物料在向量空间中应该是相近的。这体现的是用户与物料的匹配性。
    • U2U召回。 qqtt 都是用户。#card

      • 比如使用孪生网络,qq 是用户一半的交互历史,tt 是同一用户另一半交互历史,二者在向量空间应该是相近的,这体现的是同一性。

如何定义负样本,即哪些q和t在向量空间内应该较远;#card

  • [[负样本主要靠随机采样]]

  • hard negative

如何将q和t映射成Embedding;#card

  • 排序鼓励交叉,召回要求解耦。

如何定义优化目标,即损失函数。#card

  • 多分类的Softmax Loss,只要求把正样本的概率值预测得越高越好。正样本来自用户真实反馈,负样本往往未曾想用户曝光过。

    • nce loss

      • [[Noise Contrastive Estimation]]
    • Sampled Softmax Loss

  • LTR 思想,把用户喜欢的排在前面,最求排序的相对准确


混合负采样

image.png

  • 额外建立了一个 向量缓存 ,存储物料塔在训练过程中得到的最新的物料向量。

  • 如何采样 #card

    • 在训练每个Batch的时候,先进行Batch内负采样,同一个Batch内两条样本中的物料互为Hard Negative

    • 额外从向量缓存采样一些由物料塔计算好的之前的物料向量 b,作为Easy Negative的Embedding

  • 尽管在一个Batch内热门物料比较集中,但是向量缓存汇集了多个Batch计算出的物料向量,从中还是能够采样到一些小众、冷门物料作为Easy Negative的。所以,混合负采样对物料库的覆盖更加全面,更加符合负样本要让召回模型“开眼界、见世面”的一般原则。


第3章 推荐系统中的Embedding

3.1 无中生有:推荐算法中的Embedding

  • 图3-1 推荐系统的“评分卡” #card
    image.png

  • tf.keras.layers.Embedding 用法 #card

    • string 转 int ,查表,使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import tensorflow as tf

# ----------- 准备
unq_categories = ["music", "movie", "finance", "game", "military", "history"]
# 这一层负责将string转化为int型id
id_mapping_layer = tf.keras.layers.StringLookup(vocabulary=unq_categories)

emb_layer = tf.keras.layers.Embedding(
# 多加一维是为了处理输入不包含在unq_categories中的情况
input_dim=len(unq_categories) + 1,
output_dim=4) # output_dim指明映射向量的长度

# ----------- Embedding
cate_input = ... # [batch_size,1]的string型"文章分类"向量
cate_ids = id_mapping_layer(cate_input) # string型输入的"文章分类"映射成int型id
# 得到形状为[batch_size,4]的float稠密向量,表示每个"文章分类"的语义
cate_embeddings = emb_layer(cate_ids)

3.2 共享Embedding还是独占Embedding

  • 独占 embedding 例子 #card

    • 比如在之前的例子中,App的安装、启动、卸载对于要学习的App Embedding有着不同的要求。理想情况下,​“安装”与“启动”两个Field要求App Embedding能够反映出App为什么受欢迎,而“卸载”这个Field要能够反映出App为什么不受欢迎。举个例子,有两款音乐App,它们都因曲库丰富被人喜欢,​“安装”与“启动”这两个Field要求这两个音乐App的Embedding距离相近。但是这两个App的缺点不同,一个收费高,另一个广告频繁,因此“卸载”Field要求这两个音乐App的Embedding相距远一些。显然,用同一套App Embedding很难满足以上两方面的需求,所以大厂一般选择让“装/启/卸”3个Field各自拥有独立的Embedding矩阵。
  • [[@CAN: Feature Co-Action for Click-Through Rate Prediction]] 的目标有两个:像FFM那样,让每个特征在与其他不同特征交叉时使用完全不同的Embedding;不想像FFM那样引入那么多参数而导致参数空间爆炸,增加训练的难度。提出的特征交叉结构 #card
    image.png

3.3 [[Parameter Server]]

  • 基于PS的训练流程如图3-8所示,每个步骤的具体操作描述如表3-2所示。 #card
    image.png

image.png

  • 总结下来,PS训练模式是Data Parallelism(数据并行)与Model Parallelism(模型并行)这两种分布式计算范式的结合。

    • 数据并行。#card

      • 数据并行很好理解,海量的训练数据分散在各个节点上,每个节点只训练本地的一部分数据,多节点并行计算加快了训练速度。
    • 模型并行。#card

      • 推荐系统中的特征数量动辄上亿,每个Embedding又包含多个浮点数,这么大的参数量是单个节点无法承载的,因此必然分布在一个集群中。

      • 接下来会讲到,由于推荐系统中的特征高度稀疏的性质,一轮迭代中,不同Worker节点不太会在同一个特征的参数上产生冲突,因此多个Worker节点相对解耦,天然适合模型并行。


第5章 召回

5.2 向量化召回统一建模框架

  • [[向量化召回统一建模框架]]

  • [[向量召回]] 基本流程 #incremental #card

    • (1)训练一个模型 MM ,将 QQ 中的每个实例 qq 和T中的每个实例 tt 都映射到同一个向量空间。

    • (2)将T中几十万,上百万个实例喂入模型M,映射成向量。再把这几十万,上百万个向量灌入Faiss或Milvus这样的向量数据库,建立索引。

    • (3)在线服务时,对于一个Q类的实例 qq ,通过模型M将其映射成向量 Embq\mathbf{E m b}_q 。再在向量数据库中,通过近似最近邻(ANN)搜索算法,查找与 Embq\mathbf{E m b}_q 最近的 KKTT 类的邻居向量 Embti\mathbf{E m b}_{t_i} 。这些邻居向量对应的 ti(1iK)t_i(1 \leqslant i \leqslant K) 作为召回结果返回。

5.3 借助 [[Word2Vec]]

5.4 “瑞士军刀”FM的召回功能


第4章 精排

[[推荐算法的"五环之歌"]]

4.2 交叉结构

4.3 用户 [[行为序列建模]]

  • [[@日久见人心:论建模用户长期兴趣的几种姿势]]

  • DIN实现了用户兴趣的“千物千面”​,但是仍有不足,就是它只刻画了候选物料与序列元素的交叉,却忽略了行为序列内部各元素之间的依赖关系。对用户行为序列建模的方法是采用双层Attention#card
    +

image.png


Jtalk@产品经理

产品是什么?#card

  • 是具备商业价值的功能集合

产品定义中的重点?#card

  • 1.商业价值;

  • 2.功能集合

  • 化重点:「商业价值」,所以说没事少脑补一些有的没的,什么是“好”的产品,“好”的产品是能经过商业市场检验,能活下来,活的好的产品,而不是乱七八遭各种脑补功能、需求和需要的产品,一切产品不以商业价值为目的的产品,在当今社会是不能称作为“好”产品

产品思维是什么?总体是以下五个部分:

  • 1、需求识别思维#card

    • 找到用户是谁,本质是找到用户的“那个”需求或者需求集合
  • 2、供给思维#card

    • 功能集合是什么,功能解决了第一条中用户的什么需求(问题),重要的是「需要」问题,用户凭什么需要你
  • 3、商业匹配思维#card

      • 商业价值如何体现的,匹配模式
  • 4、说明书思维#card

      • 产品功能描述清楚,简单扼要,说“人”能听懂的话
  • 5、迭代思维#card

      • 不管你是MVP还是狗屁敏捷,不迭代,Bug怎么办?MKT怎么办?PR怎么办?

PM的核心技能又是什么?#card

  • 1、产品设计:了解用户需求,挖掘产品机会,设计出合理的产品架构,实现产品的有效开发

  • 2、技术管理:熟悉互联网技术,掌握产品开发流程,控制产品开发进度,确保产品质量。

  • 3、 市场营销:了解市场趋势,分析用户行为,推广产品,提升产品知名度。

  • 4、 项目管理:组织项目团队,制定项目计划,控制项目进度,确保项目顺利完成

  • 5、数据分析:分析用户数据,挖掘产品机会,改进产品设计,提升产品体验

主流产品岗位要求#card

  • 1~3年的岗位,公司看中的是基础技能,如竞品分析、原型设计、文档撰写、需求落地等基本功;

  • 而3~5年的岗位,公司看中的则是偏产品架构、商业化的能力,如产品战略规划、商业思维等等

能力

  • id:: 67013df2-d7ae-4db4-8347-b3d1883085cc
  1. 行业洞察的能力#card

    • 快速了解一个行业,因为如今跨行业趋势已经越来越明显。这就要求公司内的员工要具备跨行业工作的知识储备、视野和能力。

    • 不仅仅是要快速了解行业,更重要的是能在一个行业有深刻的认识和积累,并深刻洞察行业发展趋势及脉络。

    • 如果把每个细分行业比作一条赛道的话,那产品经理就该这样给自己提问:这个行业的市场规模有多大?(赛道规模)这个行业发展趋势如何,未来5年是一个什么走向?(赛道趋势)目前有哪些行业玩家,它们都是怎么布局的?(竞争情况)在这个赛道,我们有什么积累和竞争优势?(优势分析)

    • 只有当你能清晰明了地回答上面几个问题,才能在关键时刻做出更有利于公司业务的产品决策。

  • id:: 67013df2-52c7-4fba-b251-b3f2bf4ed176
  1. 用户洞察的能力

    • 很多方法论把“用户洞察”等同于“用户研究与分析”,提倡通过大数据分析来掌握用户动态,以用户画像代替具体的个体来指导业务走向。#card

      • 这个方法不能说完全错,但按照这个来做只能说让你在理解用户上不会出现大的差错。
    • 用户洞察与用户研究不同,用户洞察更把人当作人,而不是数据或者指标。#card

      • 所以,优秀的产品经理不仅仅是要掌握基本的用户研究思路和方法,更重要的是能洞察心理和人性。
  • id:: 67013df2-f270-4b43-988d-1581446b2ab1
  1. 商业化的能力#card

    • 16年左右整体行业的诉求是「增长」;而这两年,可以很明显的感觉到各个公司的商业化速度都在加快,所以行业的诉求又变成了「商业化变现」。

    • 整个行业从来没有像现在这样渴望赚钱。这里面当然包含了多重因素,一方面是本身行业的周期发展,另一方面,疫情其实也加速了这个过程。于是,你会看到能帮着企业赚钱的产品经理(包括任何岗位)越来越值钱了。

  • id:: 67013df2-422b-4583-b77a-3a28de39db06
  1. 产品规划的能力#card

    • 当你对行业有了一定的洞察,对用户有了深刻的了解,又掌握了不错的商业化变现思维和能力,这个时候最重要的就是产品规划的能力了。

    • 所谓产品规划,就是你能站在公司战略角度,结合行业现状、业务现状,制定出产品下一个阶段的重点目标,并规划出一个最合理、投入产出比最高的产品路线图,告诉大家我们接下来一个季度、接下来一年到底该怎么干、到底该干什么。

    • 初阶和高阶产品的一个很大的分水岭,也是产品规划能力。前者更多的是一个支持的角色,后者则是整个产品团队的指挥官,是产品核心方案的策划者。

    • 对于很多人来说确实不太容易。既要懂行业、又要懂用户、还要会商业化思考、产品规划能力。每一项技能和思维的打磨,都需要付出大量的心血,绝不是一时之功。

    • 但是这些都是一个「产品」本应该去做的,甚至说是本来应该有的技能,天天被骂主要是因为各个方面都会缺失,初阶的都做的不好,更不要提高阶的「规划能力」了。

[[方法论]]

  • 方法论本质是解决问题的工具,具备标准化、系统化和可复用性的特点。是通过总结、抽象日常过程和细节,创建一套标准、系统、可复用的理论方法以解决特定问题。#card

    • 1、标准化能少走弯路,而标准的产品方法论不仅可以让我们按部就班地执行任务,还能提高工作效率和减少错误率。

    • 2、系统化可减少遗漏,帮助我们有序地展开思路,从而避免因考虑不周而导致问题遗漏。

    • 3、可复用能提高效率。避免重复造轮子,提高解决问题的效率。

      • 比如常用构思文章框架用到的就是3W法(what,why,how),从产品方法论的定义、必要性和应用这三个角度对产品方法论进行系统全面的讲解
  • 产品方法论

    • 大致上在 PM 岗位上的产品方法论主要有三种类型,分别是:理解问题,分析问题,处理问题

      • 1、「理解问题」需要运用逻辑理论类方法论 #card

        • 逻辑理论的主要作用有两个:

          • 一是避免陷入思维陷阱;

          • 二是辅助进行思维延伸。

        • 例如

          • 在投入太多、不舍得退出的情况下,我们可以考虑沉没成本的概念;

          • 在制定产品战略时,我们可以考虑要投入多少才能实现最大的边际效应;

          • 在寻找目标用户时,我们可以考虑长尾理论,像拼多多一样将下沉市场部分考虑进去。

        • 还有很多类似的理论逻辑,有时候,我们可能对某个问题只有模糊的概念,通过学习和应用这些理论逻辑,能让我们的思路更加清晰,更加深入理解问题的本质

      • 2、「分析问题」需要运用分析框架类方法论 #card

      • 3、「处理问题」需要运营解题思路类方法论 #card

    • 一、如何构建方法论 #card

      • 我们可以通过学习他人方法论和自己总结方法论的方式来构建方法论,也可以通过对比分析他人的方法论来梳理自己的方法论,然后在实践中改进。也可以在实践中总结自己的方法论后,去参考借鉴他人的方法论来改进完善自己的方法论,「既要读万卷书 ,也要行万里路」。

      • 能够直接被吸收的方法论普遍为「逻辑理论」和「分析框架」。这些方法论虽然可以被直接套用,但最好还是要有自己的理解,并在具体场景下进行微调。方法论可以提供思路,但最终的「思考」还是需要自己去完成。

      • 而「解题思路」这类方法论,因为每个人的实际情况不一样,所以能在大部分场景通行的方法论并不多见。更多的还是由个人总结的方法,比如产品经理的工作流程,虽然各个团队整体大致相同,但具体落实到不同文化、类型、规模的公司都会有不同的产品工作流程。

      • 面对同一类问题,不同人的解题思路应该取其精华去其糟粕,融合改进。虽然改进后的解题思路会更全面,但仍然存在许多没有考虑到的问题。因此,吸收他人的解题思路需要根据个人情况和使用场景不断思考、实践和复盘,才能真正将其变成自己的东西。

      • 如果不经过这个过程,不经思考的套用别人的方法论,最后只会是效果差强人意。俗话说:“学我者生,似我者死”。学习和应用产品方法论也是如此。

    • 二、如何总结自己的方法论? #card

      • 自己总结解题思路的步骤分为四步:计划-执行-调整-复盘

      • 首先,通过制定详细的计划,将整个解决问题的过程分解成可行的步骤,确定每一步的时间和资源需求,以及对应的实现策略。

      • 其次,依照计划执行,在过程中不断地检查进度和达成目标,遇到问题及时调整方案。第三步是调整,即对已有方案的进一步完善和改进,充分发挥自己的想象力和创造力,找到解决问题的最佳路径。

      • 最后一步是复盘,对整个过程进行回顾,反思过程中可能出现的问题以及未来应该注意的地方,为后续的解决问题积累经验。

      • 这个四步的解题思路,不仅仅适用于个人解决问题,同样适用于团队协作解决问题。通过遵循这个步骤,可以使团队成员的工作更加高效,团队更加协调和有序,同时也可以帮助团队充分挖掘潜在的解决方案。

    • 方法论总归只是理论,构建好产品方法论只是开始,最终的目的还是要将其用于实践当中,读万卷书和行万里路是相辅相成的。正所谓,学而不思则罔,思而不学则殆,学习他人理论但不实践思考就会迷惘而无所适从,而单纯的实践思考,但不去学习新的知识就会逐渐懈怠,故步自封。#card

      • 因此,自己「反思」(复盘)工作,和学习他人工作经验都很重要,只有俩者同步进行才能让自己的产品方法论不断优化完善。

      • 仅仅理解产品工作内容学到的知识是死的,只有了解工作流程之间的联系并勾通应用场景才能做到活学活用产品知识。因此,我们需要在实践中不断总结经验,加深对于产品知识的理解和掌握,才能在实际工作中更好地应用所学的知识。

      • 我们只需要熟悉知识框架结构,并记住知识的概念和作用即可。具体的应用方法和技巧80%都是不用记的,只需通过反复调用20%的常用内容以达到记忆和熟练应用的效果。

      • 很多产品经理只注重结果,只知道按照流程去完成任务,却缺乏自己的独立思考能力,这样做的话只是能完成工作,而不能做好工作。任何产品经理在工作一段时间后都能够成功地落地一个产品,但不是每一个产品经理背后都有一款成功的产品,而成功的产品是产品经理晋升的最佳资本。

      • 因此,流程只是达成目标的工具,产品经理的工作应该以目标为导向。

    • 虽然我说了很多关于PM的事情,其实所有岗位的思路、甚至是学习、阅读等等的思路框架都是相同的。在完善自身「知识体系」的同时,也要更要践行“[[读写说教]]” #card

      • 你会「读」,不见得你会「写」;你会写不见得你会「说」,你会说不见得你会「教」;你读写说都会,你「教」不了不懂的人,说明你自己不是真的「会」,如果真的「会」,你都「教」不了不懂的人?

      • “读写说教”是一个流程也是一个最基本的逻辑。简明扼要的表述,让不懂的人也能理解,这是个比较高阶的水平段位,在此互勉,学以致用。

[[Jtalk@产品思维]]


Jtalk@产品思维

“产品思维”是每个互联网从业者都会高频听到的词汇之一,但“产品思维”绝不应简单理解为产品经理的思维,其重点是「产品化」的思维模式。

我们常用“产品思维”作为一种idea或方案的评判标准,而不是将某个“产品经理”的想法视为「产品思维」。

一、为什么需要产品思维???#card

  • 优秀的思维模式能够很好地还原和预测物理世界的真实规律。而在一个完整的软件产品开发周期里,会出现三种标准模型。

  • 1、实现模型:代表研发工程师开发产品的代码模式。比如是云端服务,还是混合服务;是用分布式架构,还是集中式架构;是用机器学习等等

  • 2、呈现模型:代表工程师(包括PM和QA)设计的产品功能界面及系统。好的呈现模型能做到和用户的心理模型基本一致,差的呈现模型会和实现模型没什么两样。

  • 3、心理模型:代表真实用户使用产品时的心智模型及操作预期。有些模型是对现实生活的投影,比如:看到手推车的图标,知道是选购商品的清单;浏览照片时,知道左右滑动可以翻看下一张照片。还有一些模型是由主流产品培养出来的,比如:下拉内容列表刷新内容;扫描二维码打开网页或APP;滑动接听电话等等

  • 那么结合现实的分工情况,“呈现模型”就是「产品思维」的一种投影和落地;相应的,实现模型和心理模型分别对应技术思维和用户思维

  • 所以好的「产品思维」能把呈现模型变成用户和技术之间的最佳桥梁,所以怎样强调产品思维的重要性都不为过。如果你做不了这个桥梁,那么对不起,你不仅被各部门骂还是个废物,不配叫做「产品」

二、什么是产品思维???

  • 产品思维本质上是一种「实现思维」,它天然存在理想和现实的矛盾性。#card

    • 正如我们无法脱离用户和开发的角度去描述“产品”本身的好坏。

    • 如何对产品思维下一个完整的定义,需要我们先理清它与“用户思维”和“技术思维”之间的关系。

    1. 用户思维
    • 用户思维本质是一种「需求」思维(注意,这里不是「需要」),即“我”需要得到什么样的服务或则体验。特点如下:#card

      • A,是一种个人主观视角;

      • B,聚焦某个具体场景,追求细节;

      • C,对时效性的要求更高,很少有用户愿意为未来的长期收益买单;所以是「需求」并不是「需要」

      • D,关注反馈,而非预期;

      • E,习惯使用“快思考”(参见《思考,快与慢》中的“系统1”)

    • 最典型的例子是大多数产品的用户反馈都是希望添加新功能,而每个人在其描述的立场都是非常合理的。#card

      • 以微信为例,很多人提议希望能收到删除好友的通知,而不是等到自己发消息时才尴尬地发现消息已无法发出。

      • 站在被删除用户的角度上,他的提议是合理的;站在主动删除好友的角度上,现有的模式又是更得体的。

      • 所以,用户思维不是一种普世思维,它是个体在某个场景下的思考方式。

    • 更有意思的是,真实的产品用户一般不会主动提及“用户思维”,这个词往往在产品或市场内部被广泛传播,其目的是设定产品边界,避免没有价值的设计,是“[[同理心]]”的另一种表达方式。#card

      • 当然也没有任何一个产品可以满足所有人的需求,“用户思维”不等于无条件妥协,比如“技术思维”在很多时候就站在了“用户思维”的对立面。
    1. 技术思维
    • 技术思维本质上是一种「成本思维」,即“我”需要付出什么样的资源来达到既定目标。特点如下:#card

      • A,是一种系统视角;

      • B,聚焦通用性;

      • C,对未来的可扩展性要求高,而不是功能细节上的瑕疵;

      • D,关注功能的边界场景大于常规场景;

      • E,习惯抽象和数字化一切实物;

    • 最典型的例子是需求评审会上开发经理和产品经理的各种争端:#card

      • 产品要求尽快上线一个新功能,并表示改动很小,难度不大;
        产品要求开发一个定制功能,并承诺以后不常发生,临时处理就可;
        产品文档未对极限值说明,并表示可以无穷大;
    • 开发人员骂产品缺少“技术思维”,其实在研发视角里,真正的特例是极端条件下的输入和输出,而不是大客户。#card

      • 「技术思维」的最佳实践是用最少的技术成本实现最大的吞吐量,同时还能随着系统负荷地增加保持稳定。

      • 相比之下,产品界面是否难看,功能是否易用,都属于「次优先级」的目标。

    • 和“用户思维”类似,开发人员很少主动提及“技术思维”。而且开发人员理解的“技术思维”往往是更偏向于专业性的编码思维。“#card

      • 技术思维”一般是产品内部用来权衡ROI的部分论据,

      • 当然也有更高阶的产品经理会把“技术思维”贯穿在自己的产品设计里面,比如对未来产品功能的可扩展性和复用性的考虑。

  • id:: 67013df2-e702-4916-83bb-ef6e78b6cfdb

  1. 产品思维#card

    • 产品思维是平衡“需求”和“成本”的链接器,是一种“实现”思维。特点如下:

      • A,是一种多系统视角;
        B,尊重系统的复杂性,并与之共存;
        C,关注需求的共性;
        D,多重溯源,通过“第一性原理”理解目的;
        E,想的“远”,做的“少”;
        F,商业目标和用户体验的平衡师;
    • 所有的商业产品都是产品思维的最佳体现。无论是实物商品,还是软件应用,用户都会用脚投票,让那些真正具有产品思维的团队获得商业上的延续。

    • 高级的「产品思维」往往会将日常需求抽象到人类的顶级需求。

    • 而对需求的理解程度取决于产品思维对需求源动力的抽象高度。而且来自用户侧的需求描述,往往视角较低,正如福特说“客户只想要更快的马车”,而不是福特重塑汽车工业通过流水线生产的T型车。

    • 需求溯源的方式和路径有很多,比如Musk追求“第一性原理”,站在工程师的角度去解构现实问题;也有常见的“5 Whys”式提问法,通过层层逻辑递推得到根本原因;也可以通过“5W”的原则,再现需求的真实场景;互联网产品一般通过user story的方式,把需求发起方,功能和目的串联在一起。

    • 当然并不是所有的产品都需如此,很多工具产品只是为了解决个人生活或工作的效率问题。强行拔高没有必要,也没有任何意义。但是溯源本身是非常有价值的,一个是认清需求背后的动机;一个是挖掘需求共性,增加产品单位投入辐射的用户数量。

    • 产品思维是被海量产品决策培养出来的「平衡术」。大到产品商业化的主赛道,未来一个季度的营收目标;小到产品界面的按钮颜色,页面的加载效果,这些都是「产品思维」在权衡背后的利益体后做出的决策。

    • 归类到底,产品经理的大部分决策是在多个维度去平衡产品目标和用户需求。

    • 在中文互联网世界中,每天都有一亿的用户在教张小龙怎么做产品,但是微信一直都坚守着自己的迭代路径和产品目标。所以做产品就是回归商业的本质 —— 平衡供需关系。

    • 当然,从用户角度、从产品角度、从商业角度各个不一,取决于什么屁股什么脑袋。如果一个产品盲目追随用户的声音,会变成一个什么都有的四不像(从用户端来看,你提的「需求」问题能有1%被产品重视就很不容易了);如果一个产品一味追求产品目标,比如商业价值,它会变成被用户唾弃的垃圾应用(比如做黑灰产的产品)。


@世界的参数倒影:为何GPT通过Next Token Prediction可以产生智能

链接: 世界的参数倒影:为何GPT通过Next Token Prediction可以产生智能 - 知乎

[[The Octopus Test]]

如果我们把“章鱼测试”里的章鱼换成ChatGPT或GPT 4,您会怎么看这个问题呢?也就是说,下述两种观点,您支持哪一种呢?

  • 一种观点与“章鱼测试”看法类似,认为GPT 4这种LLM模型仅仅学会了语言中的单词共现等浅层的表面统计关系,其实并未具备智能,只是类似鹦鹉学舌的语言片段缝合怪而已;#card

    • 比如不认为大语言模型具备智能的反方知名代表人物,AI圈子里的大佬代表是LeCun,语言学界代表人物是乔姆斯基,都否认通过Next Token Prediction这种方式训练出来的大语言模型能够具备智能;
  • 另外一种观点则认为:GPT 4不仅学会了语言元素间的表面统计关系,而且学到了人类语言甚至包括物理世界的内在运行规律,文字是由内在智能产生的,所以LLM具备类人智能。#card

    • OpenAI不说了,毫无疑问是最具影响力的正方代表,从目前的公开言论看,Hinton老爷子很明显也持正方观点,而且特别正方,不仅认为GPT 4具备类人智能,而且觉得将来人类这种碳基智能很可能是LLM这种硅基智能的引导启动程序(Booster),在这点上Hinton和马斯克(这是简称,全名为:埃隆·电动车之王·火箭先驱·Twitter再造者·环保先锋·火星殖民者·OpenAI唾弃者·马斯克)的看法是类似的。

@曾经火热的Graph Embedding和GNN在推荐系统上还有前途吗?

链接: 曾经火热的Graph Embedding和GNN在推荐系统上还有前途吗? - 知乎

[[GNN的收益来源是什么?]] :-> 信息利用能力的增强
[[GNN对拓扑结构的利用,对于推荐系统的收益够不够大?]]

有的朋友可能会说,我们把用户和物品之间的行为也加入图中,不久可以把知识、行为和图结构一起编码了吗?#card

  • 看起来会让生成的Graph Embedding包含更充分的信息,推荐效果肯定会有提高。

  • 这个分析是有道理的,早期Pinterest也通过这一方式获得了收益,但这种超大规模的图训练也存在一些致命的问题。[[GNN在实际应用中的一些致命问题]]

[[GNN的未来在哪里?]]

关于技术更迭的思考

  • GNN曾经在学术界是非常火热的研究方向,但实话实说,在工业界却鲜有成功应用。这是业界和学界对于“价值”判断的不同导致的。#card
    • 站在工程师的角度,我们要有火眼金睛,敏锐的分清哪些是看上去很美的方案,哪些是一针见血的方案,它们之间是有本质不同的。

    • 最重要的判断依据还是对于收益来源的精准分析。这里面有理性的成分,也有技术直觉的成分。玄学一点来说,这种直觉才是算法工程师应该建立的护城河。

    • 就像“击败雅虎的不会是另一个门户网站,击败google的也不会是另一个搜索引擎”一样,淘汰一个技术的也不会是它的下一版,而是另一个维度的新方案。

    • 大模型毫无疑问在知识的广度和利用能力上,大大超出基于知识图谱的GNN,也就当之无愧的成为推荐系统新的更强大的信息输入源。


GNN对拓扑结构的利用,对于推荐系统的收益够不够大?

对于行为信息比较丰富的推荐系统来说,比如说抖音、小红书,其大量的用户行为之间的协同关系就可以充分表征内容的相似性了,#card

  • 它不再那么需要知识本体和属性间的连接来补充这种相似性。

  • 更何况,现在主流的推荐系统也已经通过直接添加特征的方式学习过知识图谱包含的知识了,由GNN提供的增量就更加微不足道了。

另一方面,对于一些纯知识性的推荐系统,比如说豆瓣、IMDB、知网等,#card

  • 这些网站中知识的链接是非常重要的,知识间二度、三度的关联也是有价值的。

  • 而且它缺乏足够多的用户互动信息来覆盖表达物品之间的相似性,那么GNN就是有价值的。


GNN在实际应用中的一些致命问题

首先,实事求是的讲,主流的深度学习训练框架对于图数据的训练并不友好。#card

  • 我们是可以通过一些工程手段讲图数据转换成序列数据进行处理,但这需要比较重度的投入。

  • 而且由于要维护整个知识图谱的拓扑结构并在其上采样,GNN的训练成本往往很高,进一步增加了工程投入。

其次,GNN训练得到的Graph Embedding的实时性比较差,它的训练也无法做到目前主流深度学习模型的实时更新。#card

  • 因此GNN不可能作为推荐主模型来使用,只能把生成的Graph Embedding用于召回和特征输入。这让GNN的重要性大打折扣。

  • 在深度学习推荐系统早期,大家的实时性都比较差,训练成本没有打下来的时候,GNN还有一定的优势,但如今主流的推荐模型都是实时更新的情况下,GNN的成本和实时性的问题进一步加大了产生绝对正收益的难度,让本来收益来源基础就比较薄弱的方案更加难以打平。


GNN的收益来源是什么?

推荐系统优化效果的收益来源 #card

  • 收益总是来源于样本、特征和模型三个方向的一个或多个。

  • 可以再精炼成两个方面,收益要么来源于信息的增加(样本、特征),要么来源于信息利用能力的增强(模型)

例子

  • 比如说,一个电影推荐系统,从来没有利用过电影中的演员信息,这时候把演员的信息加入到推荐系统中,很大概率能够带来效果的提升,因为这部分信息是新鲜的,系统从未学习过的知识,这就是 增量信息 带来的收益。
  • 我们的推荐模型本来是一个简单的MLP模型,把所有特征通过MLP进行交叉。但用户的行为是一个时间序列,是有前后关联性的,那么改成sequence model就能够更好的表达用户的行为及背后兴趣的变化,这部分的收益就是 信息利用能力 增强带来的。
    我们拿一个电影阿甘正传的knowledge graph来说,它的相关导演,演员,风格的信息肯定是重要的。但对于一个成熟推荐系统来说,肯定是已经通过其他形式学习过这些信息了,比如直接把这些side information进行Embedding化之后喂给模型。我们没有必要一定使用GNN来学习这些知识,所以GNN的收益不来自于增量信息。#card
    image.png

那么GNN如果有收益的话,就一定来自于信息利用能力的增强。

  • 我们拿一个比较经典的GNN方案[[RippleNet]]来说,它一层层的从中心节点扩展学习到周围节点,有二跳、三跳关联关系的学习能力。本质上来说,它利用了knowledge graph点与点之间的拓扑结构,并把拓扑结构中蕴含的关系信息编码到Embedding中去,可以说GNN增强了对知识图谱中关系结构的利用能力,这才是GNN的主要收益来源。#card
    image.png

  • 早期基于Random Walk的Graph Embedding生成方案更加纯粹的利用了节点间的拓扑结构。比如Node2vec分别基于BFS和DFS随机游走生成序列后,再进行Embedding编码。所以本质上,Node2vec没有引入任何新的知识信息,而是增强了对关系结构的利用能力。 #card
    image.png


GNN的未来在哪里?

大模型的出现可以说是对GNN的降维打击。如果说曾经GNN对于知识图谱的学习还可谓是有独特优势,在大模型出现之后,GNN在该方向上的优势也荡然无存。大模型对于开放世界知识的全量学习,几乎可以吊打GNN对个别领域的知识学习。特别是多模态大模型几乎可以对文本、图片、音频、视频等任意信息进行同一空间内的Embedding化,更是让GNN的未来更加暗淡。#card
image.png


The Octopus Test

Bender & Koller 两位说英语的荒岛幸存者被困在相邻岛屿上,中间隔着危险水域。幸运的是,他们发现了前任居民留下的电报机,电报机通过一条水下电缆连接起来,他们能够通过电报传递信息。#card

  • 但是,他们不知道的是:附近水域里,生活着一个具备超级智能的章鱼,它劫持了水下电缆并拦截了他们之间传送的消息。尽管章鱼不懂英语,但其超级智能使其能够检测到电报信息文字的统计模式,并能准确表示各种电报信号间的统计关系。

  • 在章鱼觉得自己已经学好这些统计规律之后,它切断水下电缆,将自己两个长触手定位在电缆的两个末端,基于它所识别出来的统计模式,接收并自己来回复两名漂流者的电报信号。

  • 无论两位幸存者是否注意到交流对象已发生变化,章鱼发送出去的信息,在本质上似乎没有任何含义。

  • 毕竟,章鱼只是遵循它从人类之间的前期交流中学到的统计模式,而并没有看到过任何人类对信号的解释,比如“椰子”或“海水”所代表的真实含义。此外,章鱼甚至可能都不明白这些信号是具有意义的,或起到了促进交流的功能


Literature Note 例子

example:根据多个 [[F-Note]] 写一个 [[L-Note]] #card

  • 这张图片讨论的是托马斯·卡莱尔在1840年的一次演讲中,如何明确了作者身份的定义。他将作者描述为一个受到启发的独立创作者,强调创作的自主性和天才。这一观点奠定了浪漫主义时代作者形象的基础,对之后150年作者身份的观念产生了深远影响。卡莱尔将作者视为由“原创性”、“真诚”或“天才”启发的自主个体。这种独立创作的形象在此后一个半世纪中变得深深植根于现代意识中。

image.png

用自己的话重写 fleeting notes 的内容 example #card

  • 这张图片中的内容讨论了文学领域对于创意型企业家作为作者合法性的问题。文学学者和文化历史学家表明,他们在21世纪的视角中,仍然固守于由卡莱尔在19世纪中期提出的浪漫主义作者的定义,没有改变。他们难以接受其他类型的作者形象。因此,创意型企业家在这些领域的看法中不被视为合法的作者角色。

image.png


通过日常生活中最典型的三个例子来理解生命力

第一个例子是健身之后的疲劳感,或者跑完马拉松之后一头倒下的那种感觉。人往往是通过疲劳感来感受到生命力的,健身、跑马拉松之后你会非常疲劳,但同时身体告诉你,你很有生命力。#card

  • 为什么健身的人会觉得自己有生命力呢?

    • 因为他的意识跟行动形成了一种有“间隔”的关系。大部分人去健身不是被迫的,是自愿选择的。他知道自己为什么去健身,在这个过程中他会挑战自己,挑战到什么程度由自己把握。他清楚挑战的目的是什么,为什么要挑战,最后达到的结果也跟他的设想差不多。
  • 一方面,运动确实是在燃烧生命,如果不燃烧就得不到生命力的感觉,比如躺平很快就会产生无意义感、空虚感,你必须要让它燃烧。在燃烧的过程中是有痛苦的,但是你的意识能够对此有一个清晰的叙述:我为什么干这个、我要怎么干、我会不会失控……这个过程可以自己调配,有一定的自主性,这种意识的存在是非常重要的。

为什么要谈生命力呢?#card

  • 在内卷的时代,大家经常讲行动力、执行能力这些词,但生命力和行动力的差别很大。

第二个例子,很多行动力非常高的年轻人,看上去非常忙,一天到晚要做很多事情,但他们往往会觉得这种忙是在消耗他的生命力,#card

  • 因为他没有办法对自己生命燃烧的过程产生一种意识上的间隔,他觉得他的意识完全被任务执行的过程所碾压,没办法从行动当中稍微抽身出来,去思考自己正在干什么、为什么干。

我想通过这个例子讨论,我们如何在一个不理想的状况下去寻找生命力。#card

  • 健身的例子虽然典型,但它不是非常有代表性,因为我们生活中的绝大部分时间不是在健身,而是在做很多工作。这些工作总是不那么令人愉快的,也不是百分百自己想做的。这个时候,我们的意识能不能跟行动产生间隔。但是我们能不能够告诉自己:我做这个事情确实是不太令人满意的,但是有怎样的原因。如果我们能对此做一个前因后果的叙述,就能够保证一定的生命力。

  • 现在我们看到的生命力的消耗,不仅是忙,而且在忙的过程中没办法让意识从行动当中抽身出来,对自己有一个叙述,大家都觉得被碾压了。

我希望通过分析来展示,意识无法抽身 的责任不是完全在于我们个人的。

  • 无论是工作还是学习,我们的任务都被设计成这样多头的、分散的、一个接一个碾压性的。特别是在学校,时间和空间的安排、每天学习任务的安排,都阻止着 间隔 的产生,人就很难有能力用意识再去反观自己的行动,形成自己的叙述。
  • 而且,间隔的产生不是完全自然的,需要一定的培养,需要很多别的经验来支撑,需要有别的参照系,但 学生 比较年轻,现在除了上学可能还要补课,学校里的事情就构成了他们的整个世界,很难让他们自己形成一个比较独立的反思,去思考我在这里学习究竟是怎么一回事。
  • 失去 间隔 ,他就会感到意识被碾压,再加上体力的消耗等等,他会就觉得生命力非常消耗。

项飙之前谈工作的观点

  • 很多年轻人之所以抗拒“重复的工作”,不是因为“重复”本身,而是因为 “意义的贫困” ,即 看不到工作产生的意义是什么 。加上大多数人不是在拼命工作就是在拼命消费,根本没有时间停下来思考意义,就会陷入更加恶性的循环。你看,当你问出“真是这样吗”,就会发现“好工作”也是重复的,重要的反而是去寻觅工作的意义。

最后一个例子,很多艰苦的、或者我们看上去无意义的劳动,在不同的情况下对人的影响是不一样的。但凡人们能够对那种无意义的劳动产生一种 有意义的叙述,他就不会一直感到被碾压。#card

  • 往往越是在受过教育的专业部门,比如律师事务所、金融机构,越难以产生间隔意识,因为在他们的整个教育过程中,唯一的目标就是把他培养成一个律师、一个金融分析家,专业就构成了他的整个的世界,他很难跳出日常的专业工作任务来看待这些工作。反而开小餐馆的人,或许他也觉得做的事情很无聊,但他能和邻里街坊产生联系,这就会给他一种另外的意义,他就不会觉得会被工作碾压。

总的来讲,生命力不等于 行动力 ,对生命力很重要的是意识和行动之间的 间隔


@快手推荐算法工程师的1年半: 业务驱动的算法创新

链接: 快手推荐算法工程师的1年半: 业务驱动的算法创新 - 知乎

我的工作方法:持续思考,不盲从

  • 第一,跨界学习,但有选择性。#card

    • 我不会把自己局限在推荐算法这一个领域,而是广泛涉猎各种AI技术和理论基础。我会关注最新的NLP或CV领域里有突破性的论文,从中汲取灵感,但不怎么喜欢看推荐系统的论文——说实话,这个领域平均质量比较差,大家都在玩小数据集,都在搞自己的baseline,每篇论文都声称自己超越了前人,很难让人信服。

    • 我更喜欢阅读经典书籍,比如《Probabilistic Machine Learning》《动手强化学习》,以及一些高质量的公开课,比如香港大学的信息论、UC Berkeley的CS285强化学习课程。这些系统性的理论知识比追逐最新论文更能给我带来深刻的理解和灵感。当然,需要写论文时我也会认真调研现有工作。

  • 第二,问题驱动,从业务痛点出发。#card

    • 每次解决问题,我不是先想"我要用什么酷炫的算法",而是认真思考"业务的真正痛点是什么"。快手的用户体量巨大,行为异常复杂,理解业务比套用算法重要得多。通过分析用户行为数据,常常能发现被忽视的模式和优化机会。
  • 第三,写作倒逼思考。#card

    • 有了初步想法后,我喜欢尝试把它整理成论文形式。这个"倒逼"机制特别有用——它逼着我系统思考问题,找理论依据,设计合理实验,最终不断完善算法。

    • 正是这种方法让我在一年半时间里完成了四篇算法研究,更重要的是在实际业务中创造了价值。

  • 第四,小步快跑,迭代验证。#card

    • 我在快手学到的另一个重要方法是"小步快跑"。不追求一步登天,而是先上最小可行版本验证思路,然后根据反馈不断迭代。这种方式让我能迅速试错,及时调整方向,大大提高了工作效率。

CQE算法:从"预测总是不准"到"建模整个分布"

  • 动机:为什么watch time预测总不够准?#card

    • 在快手,我最初负责多样性相关工作,这强烈依赖于各种PXTR(预测值)的准确性。日常工作中我发现一个有趣的现象:我们的模型在整体指标上看起来还不错,但对单个用户-视频对的时长预测却经常有很大偏差。有时候模型预测用户只会看几秒,结果他看完了整个视频;有时候预测会看很久,实际却几秒就划走了。

    • 思考后我意识到问题的本质:我们一直在用一个点估计(单一期望值)来预测本质上充满不确定性的行为。我们无法完全获取用户的信息,导致用户的行为本身就是随机的。同一个用户在同一个时间看同一个视频的时长是一种分布,这种不确定性用单一值根本无法准确捕捉。

  • 灵感:分位数回归的应用#card

    • 解决思路的灵感来得很偶然。一天早上,我在会议室里看《Probabilistic Machine Learning》这本书,读到Quantile Regression(分位数回归)章节时,突然有种被闪电击中的感觉——分位数回归不就是描述分布的好方法吗?它能同时预测多个分位点,从而刻画整个分布的形状!

    • 当天我就迫不及待地开始实现这个想法。基本思路是:不再预测单一的期望watch time,而是同时预测多个分位数(比如10%、25%、50%、75%、90%分位数),从而捕捉watch time的整个条件分布。这样,我们不仅知道用户可能观看多久(中位数),还能了解这个预测的不确定性范围(分位数间距)。

  • 意外的发现:分布特性与预测准确性的关系#card

    • 在论文的Rebuttal过程中,一位审稿人提出了一个尖锐问题:“有什么量化的数据支持分布建模的重要性吗?”。这个问题确实难倒了我。

    • 为了回应这个问题,我进行了一项额外实验:研究分布特性(如IQR,即分布宽度)与预测准确性之间的关系。结果出乎意料地清晰:

1
2
3
4
5
6
IQR范围    UAUC    MAE    样本比例
[0.0,0.1] 0.721 0.105 0.077
[0.1,0.2] 0.693 0.148 0.226
[0.2,0.4] 0.631 0.197 0.543
[0.4,0.5] 0.573 0.266 0.134
[0.5,1.0] 0.536 0.305 0.020
+ 这张表告诉我们:分布不确定性越小(IQR越小)的样本,预测准确性越高(UAUC更高,MAE更低)。这个发现不仅回答了审稿人的问题,还让我对用户行为本质有了更深的理解:用户行为的可预测性是不均匀的,有些行为模式(如重度用户)更稳定可预测,而另一些(如新用户或探索行为)则充满不确定性。

+ 有了这个watch time分布建模方法后,我们就可以根据业务需求设计不同的推断策略了,比如保守估计、动态分位数融合等。最终,CQE算法在线上带来了可观的留存(LT)、时长、播放量(VV)和多样性收益。

AlignPxtr算法:从复杂因果推断到简单对齐

  • 问题:学术界的方法为何如此复杂?

    • 推荐系统中存在另一个关键挑战:偏见(bias)问题。在快手,最典型的就是时长偏见(duration bias)——用户自然会在更长的视频上花更多时间,但这并不一定反映真实兴趣。#card
      • 当时学术界流行用因果推断来消除这类偏见。

      • 我阅读了大量论文,发现它们都构建了复杂的因果图,用反事实推理或后门调整等高深技术。

      • 这些方法理论上很优美,但实施起来较为复杂,让我不禁怀疑其在工业界的实用性。

  • 洞察:简化的力量

    • 有一天,我突然意识到一个关键点:不管这些方法多复杂,最后的结果,本质上它们不都是在对预测值做某种形式的"标准化"或"对齐"吗?核心就是将原始预测值除以或减去与偏见相关的后验统计量(均值或分位数)。#card
      • 我开始质疑:这些复杂方法的核心价值到底在哪?它们真能细化到用户ID级别吗?在实际业务环境下,会不会有更简单直接的方法效果一样好甚至更好?

      • 带着这些疑问,我尝试了最简单的方法:直接对齐预测值(PXTR)的均值。具体做法是,对于每个偏见因素(如视频时长),计算不同条件下的预测均值,然后从原始预测中减去这个条件均值的偏差。

      • 令我惊讶的是,这个简单方法在线上测试中带来了显著收益!这让我对学术界复杂方法的必要性产生了深刻质疑。

  • 理论突破:从均值对齐到分布对齐

    • 后来我系统学习了信息论知识,并做了一系列可视化分析,才恍然大悟:原来对齐PXTR的均值,本质上是在降低变换后的PXTR与偏见因素之间的互信息。而如果能对齐整个分布(所有分位数),理论上可以让这个互信息降为零,达到完全独立。#card
      • 这个洞察让我把前面的CQE与新的对齐思想结合起来,形成了AlignPxtr(Aligning Predicted Behavior Distributions)算法。它的核心是:通过条件分位数映射,将不同偏见条件下的行为分布对齐,从而消除偏见影响。

      • AlignPxtr的成功让我深刻认识到:在算法设计中,简单往往是一种力量。有些问题看似需要复杂的理论框架,但仔细思考后可能发现有更直接、更有效的简化方法。正如爱因斯坦说的:“Everything should be made as simple as possible, but not simpler.”(一切应该尽可能简单,但不能过于简单)。

  • 效果 #card
    image.png

SEC算法:从强化学习到行为克隆的思维跃迁

  • 问题背景:如何优化长期用户留存?#card

    • 我的第三个研究方向来源于对用户留存(retention)问题的思考。推荐系统的最终目标不仅是提高短期参与度,还要确保用户长期留存。传统的基于点击率、观看时长的优化可能带来短期收益,但不一定有利于长期留存。
  • 灵感源泉:卧室里的强化学习书籍#card

    • 当时我正躺在床上翻阅《动手强化学习》这本书,思考如何将RL应用到留存优化中。传统的强化学习方法需要设计合适的reward函数,并通过试错学习找到最优策略。但在实际业务中,这面临两个巨大挑战:一是如何设计与长期留存挂钩的reward函数;二是在线探索可能带来负面用户体验。

    • 正当我为这些难题发愁时,翻到了书中关于行为克隆(Behavior Cloning)的章节,突然灵光一闪:快手有海量用户数据,其中不乏高留存用户,何不直接克隆这些"专家"用户的行为模式?相比复杂地设计reward和冒险的在线探索,这种方法直接得多!想到大语言模型的Pretrain和SFT(监督微调)阶段本质上也是行为克隆,我更加确信这个思路的可行性。

  • 创新点:多层次专家与策略多样性

    • 进一步思考后,我发现单纯的二分法(专家/非专家)太过简化。用户活跃度有多个层次,从超高活跃到高活跃再到中等活跃,每个层次可能有不同的行为模式。#card

      • 同时,研究中我还注意到一个严重问题:简单的行为克隆容易导致策略崩塌(policy collapse),即模型只学到非常有限的行为模式,缺乏多样性。这在推荐系统中尤其危险,因为用户兴趣本身就是多样的。
    • 结合这些思考,我设计了SEC(Stratified Expert Cloning)算法,它包含三个关键创新:#card

      • 多层次专家分层:根据活跃度将专家分为多个层级,分别学习不同层级的行为模式

      • 熵正则化:借鉴LeCun的工作,引入熵正则化防止策略崩塌,促进多样性

      • 自适应专家选择:为每个用户动态选择最合适的专家策略

  • 惊人的效果:改变数十万用户的留存 #card
    image.png

    • SEC还可以用在用户兴趣拓展:

image.png

算法工程师的元认知:我的思考方式

  • 这一年半的工作经历,让我对算法创新的本质有了更深的思考:

  • 复杂与简单的权衡#card

    • 在算法设计中,我常陷入一个两难选择:是追求理论上完美但实现复杂的方案,还是选择实用简单但可能次优的方案?

    • 经过反复实践,我的结论是:理论洞察很重要,但最终方案应该尽可能简单。好的算法像冰山,水下是深厚的理论思考,水上却是简洁易懂的实现。我的三个算法都体现了这一点——它们背后有深入的理论分析,但最终实现却相对直观简洁。

    • AlignPxtr可能是最典型的例子——我直接用简单的对齐方法取代了复杂的因果推断框架,不仅实现更简洁,效果还可能更好。这正是我经常提醒自己的:不要被复杂性迷惑,真正的优雅往往是简洁中蕴含深度。

  • 理论与实践的循环提升#card

    • 我发现,理论思考和实践验证之间存在一种奇妙的正反馈循环。好的理论指导实践方向,而实践中的反馈又能纠正和完善理论。

    • 比如在SEC研究中,起初我只考虑了行为克隆的基本思路,但实践中发现策略崩塌问题,这促使我引入熵正则化;而熵正则化的效果又让我进一步思考多样性在推荐系统中的理论意义。这种"理论-实践-再理论"的循环迭代,让我的思考不断深入、算法不断完善。

    • 在反复实践中,我意识到:创新不是一蹴而就的灵光乍现,而是在这种循环中渐进式产生的。每次迭代都在我的思维中植入新的种子,最终生长为有价值的算法创新。

  • 结语:算法创新的本质#card

    • 经过一年半的实践,我对算法创新的本质有了更深理解:它不是为了创新而创新,而是为了解决实际问题;它不仅仅是数学和代码,还包含对业务的深刻理解;它的价值不在论文发表数量,而在于给用户和业务带来的实际改进。

    • 回想起写这三个算法的初衷,我都是从一个简单的业务问题出发:CQE源于"为什么watch time预测总不准"的困惑,AlignPxtr源于对复杂因果推断方法的质疑,SEC则是想避免复杂的强化学习探索。每次,都是从实际问题出发,通过深思熟虑和反复验证,最终发展成一个完整的算法框架。

    • 这告诉我:真正有价值的创新,往往源于对实际问题的深刻洞察,而不是为了创新而创新。


@推荐精排如何加特征?

链接 推荐精排如何加特征? - 知乎

关注问题#card

  • 第一、特征是重要的先验知识,但是有时我们自认为加入了一个非常重要的特征,但是模型效果却没有提升,这是特征无用呢?还是加的位置不对呢?

    • 第一个话题,就讨论如何将“先验重要”的特征加到合适的位置。
  • 第二、在多目标的场景下,如果某个目标比较稀疏,我们如何利用先验知识辅助它,使其能学得更好呢?

信心满满地设计了特征,感觉非常有业务sense,吭哧吭哧打通了上下游数据链路,模型预测一看,离线指标却稳如泰山。造成这种情况的原因有很多,其中一个可能就是,如果你的特征确实有用,但他没发挥作用的原因,很可能是特征的位置不对。#card

  • 第一,如果你先重要的特征加到DNN底部,层层向上传递,恐怕再重要的信息到达顶部时,也不剩下多少了。

  • 第二,DNN的底层往往是若干特征embedding的拼接,动辄五六千维,这时你新加入一个特征几十维的embedding,被“淹没”恐怕也不会太奇怪。那么,特征究竟要如何加才能发挥效用呢?这正是本文探讨的话题。

[[重要特征加得浅]]

  • [[Wide&Deep]]

    • wide侧就是一个LR,或者我们稍微扩展一下,就是一个一层的NN网络。#card
      • wide侧的特征离Loss近,避免了自DNN底部层层传递带来的信息损失,更有机会将我们的先验知识“一步到顶”。
  • 那么,哪些特征要进wide侧,哪些特征要进deep侧?:-> wide侧负责记忆,因此要将“强业务背景,显而易见的特征,喂入Wide侧”。

    • 在推荐领域加入wide侧#card

      • 特征及特征对上的统计数据,<女性,20~30岁,商品类别是‘裙子’>上的点击率、加购率等;

      • 或者,我们已经发现了非常明显的用户分层,比如登录用户 VS 未登录用户、高频VS低频,用户行为完全不同。为了提升模型对“用户是否登录”、“高频低频”这样强bias特征的敏感度,这些特征也。

    • 这里多提一个扩展性案例、与用户分层类似,淘宝的STAR《One Model to Serve All: Star Topology Adaptive Recommender for Multi-Domain CTR Prediction》也是将domain-id这样的强bias特征,喂入一个非常简单的dnn,得到的logits再叠加到主网络的logits上,算是wide&Deep的一个变种。#card

      • 论文最后坦言,“the auxiliary network is much simpler … The simple architecture makes the domain features directly influence the final prediction”,有兴趣或者相似场景的同学可以去试一下。

重要要特征当裁判

  • 对于一些强bias特征(eg:用户是否登录、来访天数),除了将它们加浅一些,离目标Loss更近,还有一种方法能够增强它们的作用,避免其信息在dnn中被损失掉,就是采用结构 :-> [[SENet]]或[[LHUC]]

  • SENET就相当于用户站在输入特征旁边,亲自下场辨认哪个特征有多重要,这其实也是一种变相的 self_attention 机制(如果SENET的输入是所有特征的话,可能就更接近self_attention的思想了)
    image.png

    • 强bias特征作为LHUC的输入,经过sigmiod激活函数后,输出是一个N维度向量。#card

      • N是所有fileld的个数N维向量就是各field的重要性,将其按位乘到各field的embedding上,起到增强或削弱的作用加权后的各field embedding再拼接起来。
    • 当然,如果SENET的输出维度N直接是input_layer的维度也可以,这就从vector_size变成 element_size

  • 喂入上层DNN这种结构,将一些先验认为重要的强bias的特征,放到裁判的位置,决定其他特征的重要性。#card

    • 比如,如果产品设计不允许未登录用户购买商品,那么显然“用户未登录”这个特征值,就“应该”将转化相关特征的权重置为0,因为它不能代表用户的真实意图。

    • 这样做,相比于将所有特征“一视同仁”、直接全部喂入DNN最底层,更能发挥重要特征的作用,将“先验知识”(比如这里的产品设计限制)深入贯彻。

一般都有哪些重要特征呢?

  • 表征用户本身bias的,#card

    • 比如用户的活跃程度、消费等级、性别、圈子等。
  • 表征上下文场景的bias的,#card

    • 比如用户几点来APP啊;

    • 用户当天有没有显著表露意图,比如淘宝上搜索了,加购了,购买了;

    • 商品位置信息等等。

  • 表征样本bias的,#card

    • 比如快手之前将快手APP、极速版上同一个场景的样本合并在一起训练,那么样本来自哪个APP也就是一个至关重要的特征了。

链路前节点信息帮后链路稀疏目标学习

  • 当前,多目标在推荐领域已经是屡见不鲜,以商品推荐为例,我们曝光透出的商品,不仅要让用户点击,用户点击代表着用户愿意花时间和APP一起玩,这直接代表着APP的生态;而点击之后还要尽可能地加购,当然最终目标是转化,转化直接关系公司营收。因此,我们从来不做选择,我们全都要!#card

    • 多目标之间往往存在前后依赖关系(比如先点击,才有可能转化),这样意味着,链路越靠后的环节,正样本就越稀疏,训练收敛也就越困难。因此,一个自然的想法就是多目标之间能否互助,或者一个稍微牺牲一点点去辅助另外一个而达到整体更优。
  • 信息从前往后迁移

    • 典型的案例有ESMM模型,pCTCVR=pCTR*pCVR。CTR任务的数据更多,预测精度更高,会给CTCVR的预测任务以提示。或者DBMIT模型。他们都是“拿链路前端环节的输出,作为链路后端环节的输入”,即“利用先验知识显式制订信息迁移规则”的典型手段,#card
      • 以商品推荐为例,点击环境的训练数据丰富、他的隐层输出,将极大帮助转化这个靠后环节的训练,当然这也符合一般认知,我们可以认为用户一旦点击了,他就朝着购买这个终极目标前进一步,用户加购了,则再进一步,

      • 因此,将点击、加购信息直接显示迁移到转化上,是符合产品设定下用户真实习惯的。


什么是大模型外推性?

外推性 #card

  • 是指大模型在训练时和预测时的输入长度不一致,导致模型的泛化能力下降的问题。

  • 例如,如果一个模型在训练时只使用了512个 token 的文本,那么在预测时如果输入超过512个 token,模型可能无法正确处理。

  • 这就限制了大模型在处理长文本或多轮对话等任务时的效果。


观看时长建模

一般建模观看时长用回归还是分类算loss?#card

  • 回归 loss

  • training weighted LR #card


@Embedding-based Product Retrieval in Taobao Search

淘宝搜索的向量召回特征包括语义特征与个性化特征。

  • 语义特征基于query和item title,#card

    • 不同的是query侧使用多粒度的文本encoder,同时增加当前query的补充term(历史query,这里可能是历史统计得到的相似query),

    • 而item侧语义特征则仍然使用title terms。

  • 个性化特征#card

    • user/query侧使用实时、短期、长期的用户行为(点击过的商品、店铺等),

    • item侧则直接通过itemId获得商品embedding与语义特征拼接融合。

image.png

  • 模型同样是双塔结构,

    • User tower的向量表示 #card

      • user/query侧一方面使用query多粒度term进行embedding映射,包括 1-gram,2-gram,query terms(q_seg)以及补充的query terms(q_his)。

      • 此外,q_his的输入先经过和qseg的attention得到 qhis_seq q_{\text {his_seq }} ,q_seg同样也会通过Transformer得到深度的语义特征 qseq_seqq_{s e q \_s e q}

      • 最后各粒度特征通过加和,concat得到不同粒度的query表示向量矩阵 QmgsQ_{m g s} ,而后 QmgsQ_{m g s} 分别和实时,短期,长期的用户行为的特征表示做multi-head attention,最后得到。

    • 商品的表示比较简单,#card

      • 使用itemId embedding和title terms embedding拼接得到。
    • 不同于使用hinge loss或者tripe loss,本文使用sampled softmax cross-entropy loss来进行模型训练,#card

      • 期望得到全局的正负样本距离度量,以尽可能的实现训练和预测分布的一致性(pair wise loss则更关注局部的正负样本距离度量)。

\hat{y}{\left(i^{+} \mid q_u\right)}=\frac{\exp \left(\mathcal{F}\left(q_u, i{+}\right)\right)}{\sum_{i{\prime} \in I} \exp \left(\mathcal{F}\left(q_u, i^{\prime}\right)\right)}, \
L(\nabla)=-\sum
{i \in I} y_i \log \left(\hat{y}_i\right),
\end{gathered}

样本构造 + 训练数据使用点击日志,点击数据为正样本,由于使用了sampled softmax,负样本相当于从商品池中随机采样。#card + 难样本挖掘:人为对负样本加权#card + 对随机负样本query-item pair对进行模型预测(中间模型),取Top-N的内积score的item向量表示集合 I + 正样本 i+,线性相加得到难负样本表示 Imix + alpha 平衡样本的难度 由于引入了个性化特征、记忆性的Id特征,模型不可避免地引入相关性badcase(其实不加个性化特征也免不了)。因此策略上线时还做了一些额外的相关性控制策略#card + 通过核心term(如品牌、颜色、型号等属性)匹配限制,避免模糊匹配带来的语义漂移等问题 ![image.png](/assets/image_1745139601570_0.png)


@Mobius: Towards the next generation of query-ad matching in Baidu's sponsored search

搜索广告场景

image.png

  • Mobius的模型架构同样是双塔结构,不同于常规的二分类任务,这里可以认为是3个任务,user&query tower的输出向量和ad tower的输出向量分别分成三份,分别对应计算向量匹配分,#card

    • 相应地分别预测点击、不点击以及是否为高点击的相关性badcase。
  • 三个任务的logist输出经过softmax层归一化得到u-q-ad的pair对各任务的概率。通过这种方式,Mobius实际上将样本标签分成了三个类:#card

    • 高点击但不相关、相关&低点击率、相关&高点击率,实现在相关性基础上的CTR建模。

模型使用历史点击日志作为基础数据集(<user/query,ad,clicked/unclicked> 对)。为了实现上述的三分类,还需要一个是否为badcase的label。这里使用相关性Teacher模型(预先训练好的)根据阈值来判断pair对是否相关,随后将样本送到CTR模型(Neural Click Model),进而找到低相关且高点击的样本作为badcase。得到bad标签后,进行CTR模型训练和参数更新,由此循环迭代,伪代码如下:#card
image.png


@Towards Personalized and Semantic Retrieval: An End-to-End Solution for E-commerce Search via Embedding Learning

除了基础的相关性特征(如query token和item title token),本文方案(DPSR)增加了多种个性化特征以提升模型对个性化信息的关注,

  • 用户侧包括:#card

    • User Profile:用户画像特征,如用户性别、年龄、消费能力、区域等,用于刻画用户的静态基础特征。
      User History Events:用户历史行为特征,如历史点击商品、搜索query、类目品牌偏好、点击率、成交率等。
  • 商品侧个性化特征包括:#card

    • 商品品类、品牌、邮寄类型,又如商品、店铺历史表现等。通过增加个性化特征,模型能够捕获用户偏好和商品除文本语义之外的属性特征。

模型采用经典的双塔架构,包括user/query tower和item tower两个模块。各特征离散化后通过embedding average或concat映射到固定维度后拼接,并经过DNN网络分别得到user和item的特征向量。此外,在user/query tower模块使用了multi-head来提取更加多样的特征(有点模型ensemble的感觉)。#card

  • item tower和user/query multi-head使用attention的方式进行匹配分数融合

  • Multi-head的attention仅在训练阶段计算,在线检索时,每个head将分别进行召回并通过内积分数截断同样数量的商品进行统一排序。

image.png

文章训练数据的构造比较简单直觉:#card

  • 使用用户点击数据为正样本(10亿级别)。

  • 负样本同样没有使用曝光未点击的商品,因为未被点击的商品不一定不相关。

    • random negatives、in-batch negatives,二者合并作为负样本参与训练 Ni=Nrand Nbatch N_i=N_{\text {rand }} \cup N_{\text {batch }}

    • 文章指出随着rand负样本比例的增加,商品的个性化(或热度)逐渐变强,更容易点击/成交,相应地相关性也会一定程度下降。


@如何提升链路目标一致性?爱奇艺短视频推荐之粗排模型优化历程

如何提升链路目标一致性?爱奇艺短视频推荐之粗排模型优化历程_AI&大模型_爱奇艺技术产品团队_InfoQ精选文章

想法

  • 2021 年的文章,看起来还是轻松一点,有一些简单的思路其实可以尝试。

背景

  • 最初采用的粗排模型可以归为上述第二类选型模型,是一个基于各个纬度统计特征的 GBDT 模型。统计特征维度主要包括下面几个维度: #card

      1. 不同属性的用户群体对不同类型视频(分标签、创作者和视频本身等)的消费统计特征。
      1. 视频维度累积的消费统计特征,如视频的点击率、时长消费中位数和均值等;创作者 up 主的消费统计特征以及视频标签的消费统计特征等。
      1. 用户历史消费的视频内容统计特征,如用户历史消费的类型标签统计、消费的创作者内容统计等。
  • 在业务的精排模型优化升级为 wide&deep 模型后,我们对粗排模型和精排模型的预估结果做了详细的统计和分析,发现粗排模型预估为 top 的头部视频和精排模型预估的头部视频有很大的差异。归咎原因主要是以下两方面的原因:

    • id:: 6804cbee-9175-46d7-9774-d87b1946da57
  1. 特征集合的差异:#card

    • 粗排 GBDT 模型中主要是一些稠密类统计特征,而精排 wide&deep 模型中发挥重要作用的特征主要是用户长短期消费的视频 id、视频 tag、up 主 id 等以及视频本身的 id、tag 和 up 主 id 等稀疏类型特征。

    • id:: 6804cbee-5d4a-4da2-84d7-d7c416843252

  2. 模型结构的差异:#card

    • 树型结构模型和 DNN 模型的优化和拟合数据时的侧重点还是有很大的差异的。

    • 除了预估结果和精排 wide&deep 模型有比较大的差异性外,GBDT 模型在特征处理和挖掘方面还需要投入大量的人力。综合以上分析,为了尽量弥补粗排模型和精排模型的 Gap,缩小粗排模型和精排模型预估结果的差异性,并节省大量特征统计和挖掘的人力成本,我们对粗排模型进行了一系列的升级和优化。

[[双塔粗排模型]]

粗排双塔 DNN 模型结构图
image.png

+ 

+ 用户侧和 Item 侧分别构建三层全联接 DNN 模型,最后分别输出一个多维(512)的  **embedding 向量**  ,作为用户侧和视频侧的低维表征。
+ 在构建粗排模型特征集合时,为了控制粗排模型参数的复杂度,我们对粗排的特征集合做了大量的裁剪,用户侧和视频侧都只采用了少部分精排模型的特征子集。 #card
  + 其中,用户侧特征主要选取了下面几维特征:

    + 1. 用户基础画像特征、上下文特征如手机系统、型号、地域等。

    + 2. 用户的历史行为特征,如用户观看的视频 ID、up 主 ID,以及观看视频的关键词 tag 等,以及用户 session 内的行为特征等。

  + 视频侧特征只保留了三维:

    + 1. 视频 ID

    + 2. up 主 ID

    + 3. 视频标签

[[知识蒸馏]] 实现模型压缩

image.png

+ 在蒸馏训练的过程中,为了使粗排模型输出的 logits 和精排模型输出的 logits 分布尽量对齐,训练优化的目标从原来单一的粗排模型的 logloss 调整为 :-> 三部分 loss 的加和,包括 student loss(粗排模型 loss)、teacher loss(精排模型 loss)和蒸馏 loss 三部分组成。#card
+ 其中蒸馏 loss 我们线上采用的是粗排模型输出和精排模型输出的最小平方误差,为了调节蒸馏 loss 的影响,我们在该项 loss 前又加了一维超参 lamda,我们设置超参 lamda 随着训练步数迭代逐渐增大,增强蒸馏 loss 的影响,在训练后期使得粗排模型预估值尽量向精排模型对齐,lamda 随着训练 step 的变化趋势如图四所示。#card

image.png

Embedding 参数优化 #card

  • 将模型 embedding 参数的优化器替换为稀疏解优化神器 FTRL

  • 其他层的参数依然还用 AdaGrad

  • 练得到的粗排模型的 embedding 参数全为 0 的比率也高达 49.7%之多。我们在做模型导出时,裁剪掉了全为 0 的 embedding 参数,粗排模型大小减小了 46.8%,使得模型的传输速度也有近一倍的提升,同时线上加载模型的内存消耗也降低了 100%。

线上 Inference 优化

  • 首先在计算 user 侧 embedding 时进行了合并计算,对同一个用户+千级别候选视频 pair,在计算 user 侧 embedding 时,将 user 侧的特征独立拆分,只过 一次 user 侧 NN 的 inference。这个优化使得粗排模型打分计算服务 p99 的计算耗时减少了 19ms 左右。
  • 此外,基于视频推荐时特别长尾的分布,以及如前文所述,粗排模型视频侧的特征全部是静态特征(视频 id 确定,特征也是确定的),我们对高频视频的 embedding 进行了缓存。视频侧 embedding 优先从缓存里查询,未命中缓存时再进行 inference 计算。优化后的粗排打分服务架构如下图五所示:#card
    image.png

级联模型

  • 目的 #card

    • 为了一劳永逸地解决粗排模型目标和精排模型目标一致性的问题,我们对粗排模型进行了又一次的迭代优化。

    • 通过升级为级联模型,使得粗排模型能够自适应地对齐精排模型目标的变化,同时也节省了蒸馏训练的环节,大大地节省了训练资源消耗。

  • [[粗排目标是判断item是否在精排 topk]] 从实践的角度,级联模型对模型结构以及模型输入的特征集没有做任何修改,只是调整了粗排模型训练样本的生成方式,升级后的粗排模型从学习线上真实曝光点击/播放样本,调整为直接学习精排模型的预估结果,将精排模型预估 topn 的结果作为粗排模型学习的正样本。级联模型的样本生成方式具体如图六所示。#card
    image.png

    • 所以这一次升级粗排模型到级联模型只是简单地调整了模型的训练样本,却取得了很显著的收益,除了去掉了蒸馏学习的环节,大大地缩减了粗排模型训练的资源和时间消耗,实际上线也取得了很显著的收益,视频推荐场景的曝光点击率和人均有效观看视频数都提升了 3%左右。同时各项互动指标也有显著提升,其中人均评论量有 12%的显著提升。

Dynamic NTK

分析:固定缩放的缺陷分析 #card

  • 在NTK中 S=LLS=\frac{L^{\prime}}{L} ,在推理时,这里的 SS 是固定的( LL^{\prime} 是固定的扩展上下文大小,LL 是预训练时候的最大上下文长度)。但是,这可能导致推理的序列长度 <L<L 时会损失模型性能。

image.png

动态 NTK 的公式定义 :-> 动态缩放因子:S=max(1,l/L)S=\max \left(1, l^{\prime} / L\right) ,其中 ll^{\prime} 是当前输入的实际长度。,这就允许模型在达到训练的上下文限制时较为缓慢地退化性能,避免了骤降。

  • 逻辑:#card
    • lLl^{\prime} \leq L 时,S=1S=1 ,频率基保持原样,位置编码与预训练一致。

    • l>Ll^{\prime}>L 时,S=l/L>1S=l^{\prime} / L>1 ,按实际需要的长度逐步增加频率基的缩放,避免突然调整。


FashionBert

FashionBert和文本模态下的BERT一样,分为预训练和微调两个阶段,为了适应<query, title+image>的匹配,FashionBert在微调之前又增加了triple input的微调。

预训练阶段:#card

  • 和常规的多模态BERT一样,以BERT结构作为encoder,文本模态为商品标题,Tokenize后输入到模型。

  • 视觉模态为商品图片,先通过CNN网络提取成Patch Embedding输入到BERT。

  • 文本和视觉特征输入以[SEP]分隔。

  • 预训练任务包括图文匹配、Mask预言模型任务、Mask视觉特征任务。数据则使用商品维度的<title,image>对即可。

Triple Input微调:在检索任务微调之前,FashionBert先经过了一个<query, titel, image> 三元组输入的微调,以进一步适应<query, title+image>的跨模态匹配任务,训练数据为搜索点击日志构造的query-item信息对,整体结构如下:#card
image.png

跨模态匹配微调:跨模态微调任务与经典的DSSM架构一致,只是doc端的输入升级为图文特征。query、title、image可以共享同一个BERT模型,以Segment Id区分。训练数据同样为搜索点击日志构造的<query, item>pair对。#card
image.png


NTK-by-parts

关于RoPE中不同维度的波长,有如下结论:存在某些维度 i ,其波长 λi\lambda_i 大于在预训练期间看到的最大上下文长度 L 。也就是说:在训练期间,存在某一个维度,旋转一圈后超过了 token最大上下文长度 L 。具体每个维度的波形可以参考图1-3,即Sin方法的绘图,其中 d=20,pos[0,100]d=20, p o s \in[0,100] 。#card

  • 如果某些维度的波长大于上下文长度 L(λi>L)L\left(\lambda_i>L\right) ,这说明该维度无法执行全旋转。在这种情况下,由于维度在预训练期间至少不会完全旋转一次,如果我们选择第一个token作为基准,那么在预训练期间每隔一个token到它的距离是唯一的,NTK可以用来确定它的绝对位置信息。

  • 相反,如果某个维度波长小于L (λi<L)\left(\lambda_i<L\right) ,那该维度就执行了至少一次全旋转,我们就无法在这个维度描述绝对距离,只能描述相对位置信息。

#card 因此,作者认为,不要对『只编码相对位置信息的维度』 (λi<L)\left(\lambda_i<L\right) 进行内插破坏,因为它们对于模型区分附近token的相对顺序至关重要。同时,应该始终对仅编码绝对位置信息的维度 (λi>L)\left(\lambda_i>L\right) 进行内插,因为较大的距离将超出之前模型能够编码的距离。综上,可以制定一种考虑以上所有因素的显式且有针对性的插值方法,即:

  • 如果波长远小于L,此时编码了相对位置的维度,因此不进行内插;

  • 如果波长大于L,此时编码了绝对位置的维度,应该进行内插以防止超出绝对位置的最大可编码范围;

  • 波长介于上述之间的维度,采用NTK-aware方法。

NTK-by-parts公式 #card
image.png


Neural Tangent Kernel

现状:PI会在扩展倍数特别大时显著降低位置编码区分不同位置的能力,这种现象称之为高频信息的损失。

  • [[RoPE]] 中周期和频率关系 #card
    image.png

  • PI 频率降低、角频率降低、旋转角度降低原因 #card
    image.png

NKT(Neural Tangent Kernel)的思想 :-> 高频外推+低频内插,即将 θi=b2i/d\theta_i=b^{-2 i / d} 改为 θi=(bSd/(d2))2i/d\theta_i=\left(b \cdot S^{d /(d-2)}\right)^{-2 i / d} ,也就是改变了基底(这里 b=10000\mathrm{b}=10000S=L/L)\left.S=L^{\prime} / L\right)

  • 位置编码的本质是求位置n的β进制数 #card
    image.png

  • NKT推导2——统一高频外推和低频内插 #card
    image.png

代码修改 #card

1
2
3
4
5
6
7
8
9
10
11
12
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
import torch
import transformers

old_init = transformers.models.llama.modeling_llama.LlamaRotaryEmbedding.__init__
def ntk_scaled_init(self, dim, max_position_embeddings=2048, base=10000, device=None):
#The method is just these three lines
max_position_embeddings = 16384
a = 8 #Alpha value
base = base * a ** (dim / (dim-2)) #Base change formula # NTK-Aware
old_init(self, dim, max_position_embeddings, base, device)
transformers.models.llama.modeling_llama.LlamaRotaryEmbedding.__init__ = ntk_scaled_init

Position Interpolation

使用RoPE,以长度为L训练完成模型后,当输入超过L会发生性能剧烈下降,一些论文提出可以通过给模型喂一些长度大于L的输入来微调模型,进而逐步将原始窗口长度扩大,但其代价和成效不佳(实验结果如下图4-1)。#card
image.png

思路:将超出L部分编码值压缩到L内。#card

  • 上图4-2中,外推bound的计算是用了aber变换

image.png

论文针对外推(Extrapolation)和内插( interpolation),也给出了一些实验,见图4-3: #card
image.png

图4-3的实验代码如下: #card

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import torch
import matplotlib.pyplot as plt

# build basis function
d = 4096 // 32
theta = 10000
# Frequency computation
freqs = 1.0 / (theta ** (torch.arange(0, d, 2).float() / d))
# construct basis function
L = 2048
x = torch.arange(0, L)
# basis functions
xfreq = torch.outer(x, freqs)
print(xfreq.shape)
y = torch.randn(x.shape[0])
# do linear regression
X = torch.cat([xfreq.sin(), xfreq.cos()], dim=1)

eps = 1e-5 # small regularization term
# 实现线性回归使得X*coeffs很好的逼近y,最终求解coeffs
coeffs = torch.linalg.solve(X.t() @ X + torch.eye(X.shape[1]) * eps, X.t() @ y)

x2 = torch.arange(0, 2*L)
xfreq2 = torch.outer(x2, freqs)
X2 = torch.cat([xfreq2.sin(), xfreq2.cos()], dim=1)
y2 = X2 @ coeffs

x3 = torch.arange(25, 75, 0.125)
xfreq3 = torch.outer(x3, freqs)
X3 = torch.cat([xfreq3.sin(), xfreq3.cos()], dim=1)
y3 = X3 @ coeffs

plt.figure(figsize=(16, 5))

plt.subplot(1, 3, 1)
plt.plot(x2[:L], y2[:L], "r")
plt.scatter(x, y)
plt.ylabel("attention score $a(s)$")
plt.xlabel("Positional difference $s$")

plt.subplot(1, 3, 2)
plt.plot(x2, y2, "r")
plt.scatter(x, y)
plt.axvline(L, color="k", linestyle="--", linewidth=0.5)
plt.title("Effect of Extrapolation")
plt.xlabel("Positional difference $s$")

plt.subplot(1, 3, 3)
plt.plot(x3, y3, "r")
for i in range(25, 75):
plt.axvline(i, color="k", linestyle="--", linewidth=0.5)
plt.title("Effect of Interpolation")
plt.xlabel("Positional difference $s$")
plt.savefig('PI.png',dpi=300, bbox_inches='tight')
# plt.show()

SimCSE

SimCSE仅通过简单的dropout mask操作来构造正样本对,并使用in-batch负样本,即在无监督语义匹配上取得不错的效果。在有监督模式下通过引入有标注数据也进一步提升了基线效果 #card
image.png


YARN

波长的引入

  • #card 在某个维度i下,波长被定义为:λi=2πθi=2πb2i/d=2πb2i/d\lambda_i=\frac{2 \pi}{\theta_i}=\frac{2 \pi}{b^{-2 i / d}}=2 \pi b^{2 i / d} ,因此,有如下结论:

    • 波长可描述为:在维度处嵌入的旋转位置执行全旋转 2π2 \pi 所需的token长度。

    • 维度越高波长越长。

  • 波长描述了维度i处执行全旋转2π所需的token长度 #card
    image.png

  • YaRN 和 PI和NTK这种类型的插值方案区别 #card

    • 像PI和NTK这种类型的插值方案不关心波长的维数,可以将其称为“盲”插值方法(blind interpolation),因为它们面对所有RoPE隐藏维度没有做任何针对性的处理。

    • YaRN,可将其归类为“有针对性的”插值方法,即对RoPE的不同维度做出不同处理。

[[NTK-by-parts]](局部NTK)

YARN

  • YARN 在实际使用过程中,为了实现该公式,只需要将m位置和 nn 位置的旋转位置嵌入各自缩放为原来的 1/t1 / \sqrt{t} 即可。 #card
    image.png

i2i作为推荐召回的核心,在数学假设上有什么问题?

对称性假设 #card

  • 物品A 和物品 B 相似度相同,sim(A,B)=sim(B,A)

  • 实际中可能存在 A 到 B(手机到手机壳),但反向关系 B 到 A 未必成立。

  • 召回低相关性物品

静态相似性忽略时间变化 #card

  • 根据历史数据计算的物品相似度是静态的,长时间保持稳定。

  • 物品的热度、用户兴趣会随着时间变化(季节商品、新闻热点)

  • 过时推荐

数据稀疏性与头部效应 #card

  • 需要物品有足够多交数据,才能计算相似性。

    • 长尾估计不准确

    • 头部偏差,热门物品因交互频繁,可能与多个长尾物品错误关联。

  • 热门推荐,牺牲了个性化


u2x2i

x2i 方法 #card

  • c2i

  • t2i

  • i2i

    • swing,相似 item

    • icf

  • u2i

u2x 方法 #card

  • u2c

    • 类目偏好
  • u2t

    • 标签偏好

    • 实体

    • 品牌

  • u2i

    • 点击

    • 收藏

    • 购买

  • u2u

    • 相似用户

    • 社交关系


三塔粗排模型

Zhe Wang et al. COLD: Towards the Next Generation of Pre-Ranking System. In DLP- KDD, 2020.

模型结构 #card
image.png

设计思路 #card
image.png

三塔模型的推理 #card
image.png

image.png


个性化召回

q2i2i:#card

  • 获取当前query下曝光、点击、成交的item,进一步通过i2i的方法(协同过滤、swing等)扩召回更多候选商品。

  • 同时通过类目限制(要求trigger item和cand item的类目一致)或其他离线相关性度量方法保证召回商品和搜索query的相关性,也可以直接通过query和召回商品的相关性度量保证相关性。

u2i2i:#card

  • 通过user历史曝光、点击item,召回更多的候选商品,并通过相关性策略进行不相关商品过滤。

u2s2i:#card

  • 召回user偏好的seller下和query相关的商品,作为query的候选商品。

个性化召回相对于文本召回优缺点 #card

  • 优势在于不需要精准的term命中即可召回相关的商品,且商品天然具有高点击/成交属性。

  • 缺点在于如果相关性把握不好,会引入一些影响搜索体感的badcase。


倒排索引

倒排索引中的索引指的是什么 #card

  • term 到 item_id 列表的映射

用户输入搜索query后,系统如何从库中找到命中query词的商品?暴力的方法是先对query进行分词得到每个query的term,而后遍历每个商品信息的每个term词,如果query term在商品信息中全部命中,则召回该商品。这种暴力方法有显而易见的效率问题:#card

  • 每次搜索都要有QNL次term匹配计算(Q: query 平均term数,N:商品数,L:商品信息平均term数)。

简单举例来说:假设有三个文档,“Winter is coming.”, “Ours is the fury.” 和 “The choice is yours.”, 经过简单的文本预处理(大小写转换、删除特殊字符、分词等),可以建立起如图所示的“倒排索引”。#card

  • 倒排索引是文档term到包含该term文档id的字典,基于字典数据结构的hash机制,可以快速找到包含指定term的文档id集合。

  • 可用搜索引擎如基于Lucene库的Elasticsearch

image.png


内容特征

该类特征有两种比较常见的处理方式,

  • 一是直接离散化作为模型的输入,#card

    • 如对于文本的词或字进行ID编码即可将其转化为离散特征,并进一步变换为模型可输入数据类型;
  • 另一种方式则是先对内容进行隐语义表示,并将隐语义表示作为模型输入。#card

    • 如对于文本,常见的隐语义表示可以通过word-embeding、经过微调的bert等Encoder进行语义向量特征提取;

    • 对于图像亦可以使用常见的图像encoder模型微调后预测得到其向量表示。


召回

[[倒排索引]] 解决暴力匹配的效率问题
+

u2x2i

u2i,向量召回

  • 输入user特征和item特征,然后对齐user和item的向量表征

  • 通过user的历史序列提取user的向量表征,然后和item的向量对齐

  • deepmatch

  • mind

    • 多兴趣

      • youtubednn
  • 用户行为序列

    • sasrec
  • 知识图谱

  • DSSM

探索性召回

item

  • 热门

    • 整体热门

    • 区域热门

  • 时效

  • 策略规则类

认知召回

正排召回

向量召回

扩展召回

高销量召回

重查召回

兜底召回

单字召回

[[@搜推算法面试常见问题第七期:搜索召回]]


召回多路融合

由于下游排序算力有限,系统无法对所有候选商品进行算分,需要有合适的多路召回融合策略。比较常见的融合思路如:

  • 多路召回的候选固定 比例 ,各路根据各自的排序分(如item效率分、q-i匹配分等)截断保留相应数量的候选,返回固定数量的商品送给下游排序。
  • 各路召回先合并,使用统一的 单一分数 整体截断(如item粒度的效率分),进而保留固定数量商品,送入排序模块。
  • 而对于一些 空结果或少结果 的query,有时是因为库中候选本身就不足,这时可以考虑扩召回的商品沉底追加在原队列最后,可以不影响原来的体感的情况下补充一定数量的商品。

向量召回相关性控制

由于搜索一般有比较明确的query意图,因此通常情况下搜索召回的第一目标是相关性。而很多时候通过DSSM架构虽然可以得到语义泛化的特征表达,但也免不了因语义漂移带来的相关性badcase。#card

  • 一方面可以在模型侧增加更多的语义特性(如query/item信息拓展、类目信息)或构造更难的样本等;

  • 另一方面可以从策略出发,对向量召回做相应限制,常用的如:

    • 限定类目下召回(商品类目在query类目预测集合中)、限定核心term匹配(品牌、型号等关键属性或根据term weighting)、限定向量匹配分阈值等,最终在业务目标和用户体感之间得到平衡。

向量召回覆盖范围

对于策略覆盖范围,同样有两点:#card

  • 1、由于策略很多时候不尽完美,向量匹配模型并不能对所有的query表现的都很好(如样本不均衡问题带来的模型偏置),通常需要进行case分析,总结表现不好的case类型,能优化即优化,优化成本较高的可以选择放弃该类型case的策略覆盖。

  • 2、不是所有的query对召回都有相同的需求,如候选结果已经很丰富的query可能需要增加更偏向个性化程度高的商品、而对于本身候选不足或者空结果的query更迫切的是需要补充更多的相关商品候选。从这个维度也可以考虑一些策略上的调整。


向量召回迭代离线评估指标

向量召回策略变量较多,通过线上效果调整参数成本较高,需要合适的离线评测指标进行策略好坏度量,以加快迭代效率。比较常用的如#card

  • Recall@K来度量模型的排序能力;

  • 如AUC/GAUC指标来度量策略的点击/成交效率;

  • 对于标注有query-item相关程度的样本,还可以使用F1或AUC等指标回归模型的相关性区分能力。

  • 不同的离线迭代目标同样需要设计好评测样本,以提升指标的置信度。


垂搜 vs 通搜

垂直送搜索特点

  • • 垂搜的⽂档普遍是结构化的,容易根据⽂档属性标签做 检索筛选。#card

    • • 电商:可以限定品牌、卖家、价格、颜⾊。

    • • 学术:可以限定关键词、作者、期刊、年份。

    • • 本地⽣活:可以限定类⽬、商圈、距离。

  • • 垂搜⽤户的意图明确。#card

    • • ⼤众点评⽤户搜索“寿司”,⽬的是找寿司餐厅。

    • • 淘宝⽤户搜索“拳击”,⽬的是找拳击相关的商品。


地级市买房:投资风险要大于一线城市和省会城市

我是射手520

  • 楼主,您好。有幸看到您盖的楼,您对历史、政治和经济的研究让我如醍醐灌顶,很多隐约迷惑的东西,似乎有了出路能去寻找答案。万分感谢。

  • 说到置业,您对一线二线城市谈的较多,想听听您对类似我们这样城市楼市和经济的看法。我所在的是地级市,离您帖子提到的武汉有500公里。我所在的地市以汽车工业为主导,是三大汽车集团其中之一的发源地,目前是该企业的商用车基地。#card

    • 在全省范围,离省会最远,但是在城市建设、居民生活水平、物价和房价可以排在全省前面,以前分析是因为我们这里是以工业为主,故经济发展比其他以农业为主的地市发展的要好,看了楼主的帖子,感觉跟离武汉最远也有关系。

    • 我们当地最贵房价从05年前2000以内,到09年3000-4000元,到今年的5000元,最贵的6000元。

  • 房价的飙升一方面随着全国大环境有关,我分析同时跟当地政府的发展思路密不可分,05年开始引进外地大开发商,新修了很多路,其中跟旧城区主干道平行的最重要的一条路,随着市政府入住,体育馆、美术馆,大开发商进驻,经过5年发展,该路段已经成为我们这里房价最贵的一条路,我们是小城市,在这里买房子的,除了投机成分以外,大部分应该是改善型住房,要大型小区,要绿化,这条路目前房子也是越盖越高。通过建设,当地政府财政也充裕,明显感觉对市政投入也大多了。#card

    • 我们这里养老还是不错的,山多,空气好,工业城市,经济发展也交好。
  • 我目前的置业状况是,在老城区广场旁边有单位分高层住宅一套,虽然是塔楼,但在广场旁边,弱化了容积率高,当年放弃了单位地段相对没这个中心,总价低的多层住宅,就是看中了地段,这个投资较成功,按照现在市价,房屋总价基本翻番,该房屋目前由父母住。#card

    • 08年底,在开始说的新地段够买一套房屋,120平米,多层住宅,周边政府规划为大学城,周边有两所大专院校,对于该房屋地段较为满意,虽然比不上新修的路的北边和中部靠近体育馆,靠近政府地段升值快,但较看好该地段前景,该地段新修了 一条连接老城区的通道,唯一不太满意是购买的顶楼,因为是购买的该小区的多层住宅没有电梯,如果有了孩子,住顶楼生活就不太方便。购入均价2900,目前周边的新盘均价4500元,该楼盘创造了摇号去选房的记录。该套房屋自住,当年购买房屋没有多贷款一步到位,现在如果想换个满意的难度就大的多,满意的房屋都5000往上了。这套房屋有15万左右的贷款。

    • 虽然很看好武汉的楼盘,远远现阶段大于经济承受能力,目前放弃。

  • 对于我们当地的楼盘,也超出了我们这种普通人的能力,虽然最近楼盘都卖的很火。#card

    • 好在单位公积金较多,我打算收复30%,剩下用公积金贷款,再购置一套房屋,怕再过一段时间,我的改善型需求就满足不了。

    • 前一段时间,有个机会,但是考虑按照目前房价,30%首复,要耗尽目前自己和家人积蓄,犹豫中,错过了机会。

    • 目前这种状况,不知道是否该再次买房?

  • 再次买房考虑标准时什么?我不太喜欢高层,但是原中心城区,没有大盘,都是单位或者小开发商盖的,基本没有绿化,在中心城区边上也有了一套高层住宅。#card

    • 考虑学位房?我们城市不大,目前这套中心城区房屋虽然没有画片在最好的小学中学,但是离这些学校距离比较近。

    • 在靠近那条政府搬入的路的北边靠近体育馆、美术馆(同时也靠近两所重点高中)地方置业,那里房价已经5000多,年底开盘的都是30层以上的高层,自住又不太考虑高层,总价也超出了承受范围。

    • 在当地,离那个大企业居住地,区政府也新开了一条路,那条路待开发状态,据说区政府要搬过去(要搬也是2年以后,现在那条路只有一个大开发商在开发),那条路开车到市中心20分钟,那次有机会买的就是那个大开发商的楼盘,主推多层住宅并且带电梯,去年就预售完毕,这次犹豫中,错过了,住宅品质较好,目前地段太偏。

    • 如果再有机会,该如何选择呢?

kkndme 地级市选房是比较麻烦的,因为投资风险要大于一线城市和省会城市。#card

  • 地级市的购房需求,主要是以改善性需求为主,追求的是大盘,低密度,低楼层,高绿化,最好有个江景或者水景,环境优美的别墅是首选。

  • 因为低级市城市较小,绝对的城中心如果环境比较嘈杂,小区不够高档最好不要选择。没有实力购置别墅,可以选择环境优美的高端住宅,最好是品牌大盘,一眼能够让人赏心悦目。


推荐系统优化流程

image.png

  • 流程 #incremental #card
    • 明确业务目标

    • 将业务目标转化为机器学习可优化目标

    • 样本收集

    • 特征工程

    • 模型选择和训练

    • 离线评测验证

    • 在线AB验证

    • 通过离线验证和在线AB的结果反馈到2,形成一个增强回路慢慢起飞


搜广推算法的意义

用户角度:#card
+

  • 克服信息过载,推荐系统在信息过载的情况下,用户如何高效获得感兴趣信息的问题

公司角度:#card

  • 推荐系统解决产品能够最大限度地吸引用户、留存用户、增加用户粘性、提高用户转化率的问题,从而达到公司商业目标连续增长的目的。

数值特征

特征缩放

  • Log-based#card

    • 针对幂律分布的特征(少量热门视频播放次数高)
  • [[Normalization]] 和 [[Regularization]]#card

    • 标准化将样本属性值缩放到指定的范围

      • 针对属性
    • 正则化将样本的某个范数缩放到单位1

      • 正对样本
  • Robust Scaling#card

    • 解决其他特征变换方法把特征值压缩到一个非常狭窄的空间,失去特征区分度

    • xscaled =xmedian(x)IQRx_{\text {scaled }}=\frac{x-\operatorname{median}(x)}{\operatorname{IQR}}

    • IQR 四分位距,确定第三四分位和第一四分位的差值

特征分桶

  • 为什么?

    • {{embed 数值特征离散化分桶
      }}

    • 引入非线性

    • 增强可解释性

    • 对异常值不敏感,防止过拟合

    • 分桶后可以对不同的桶做进一步的统计和组合

  • 方法

    • 无监督分桶#card

      • 固定宽度(等宽)

      • 分位数(等距)

      • 对数转换并取整

    • 有监督#card

      • 卡方

      • 决策树 [[GBDT+LR]]


数据清洗

缺失量较大直接删除特征

少量缺失值处理常用方法 #card

  • 自适应层

    • 缺失值用 w1

    • 如果不是缺失值用 w2*x

  • 均值插补

  • 同类均值插补

  • 建模预测,使用模型对缺失值进行预测

  • 高维映射

  • 多重插补

  • 压缩感知及矩阵补全

对于数值异常,可以使用箱线图观察分析,#card

  • 如个别样本特征出现极大值或极小值,可以采用最简单的均值、中位数等填充,

  • 或者在数据量级不大的情况下,直接删除存在异常特征的样本。


文本召回

基于文本的召回可以提供简单的基线,但由于召回要求term精准命中,常常会出现 召回能力不足 的问题,因此通常要配合以扩召回策略
常见的扩召回(基于文本)通常从两个维度出发:

  • query侧的扩召回 :-> 最常见的是改写,该部分在query理解章节已经做了简单介绍,这里不再赘述。
  • 物料侧的扩召回通常是 #card
    • 扩充召回字段,如增加商品详细描述、商品品类、属性等基础文本字段,

    • 或通过相似商品的基础文本信息作为本商品的扩充索引字段。


时间特征

时间特征通常情况下是比较重要的特征,该类特征可以构造为#card

  • 数值类型,如页面停留时长、距离上次曝光/点击时间等;

  • 亦可以为离散特征形式,如年份、月份、星期、小时点、节假日等


深度学习不需要特征工程?

方面,绝大多的模型都不能保证能够完美挖掘出基础特征所蕴含的所有信息,#card

  • 即模型存在精度问题,在数据量不足,特殊场景等情况下更是如此。手动的人工特征设计可以借助人的专业经验减轻模型学习负担,使模型收敛更快更好,更轻松的取得更好的结果。

另一方面,无脑将想到的特征灌给模型,无疑会增加模型的大小,其中可能会有很大一部分参数并没有很大的贡献,#card

  • 对线上inference速度要求较高或是资源有限的场景的影响尤为重要。

特征设计

特征工程的第一步是要找到对模型预测有用的特征,最常用的方式是基于经验分维度梳理,#card

  • 如电商领域第一层可以按场景元素分成User特征、Item特征、Seller特征、Query特征、上下文特征等,

  • 第二层可以按特征类型分成如类别特征、统计特征、语义特征、画像特征、时间特征、空间特征等。

  • 此外,基于已有特征还可以进一步构造组合特征,对于一些重要的特征可以优化为实时特征。

image.png

选择特征的过程也要考虑特征是否可以 取到 ,以及该特征在线上是否能够 及时获取


特征设计原则四象限

x 轴覆盖度,y 轴刻画能力#card

  • 1 完美特征(一般量少)

  • 2 ID Combination 记忆

  • 3 弱特征

  • 4 泛化低纬度特征


特征选择

过滤法#card

  • 直接通过统计方法计算单特征和目标label的相关性,并选择topk,或通过卡阈值过滤掉一定数量的特征。

  • 常见的特征相关性可以使用皮尔逊相关系数、卡方检验等方式度量。

迭代法通过迭代的方式进行特征选择,#card

  • 如预先使用所有的特征训练LR模型,接着丢弃5%~10%的弱特征(对应权重低的特征),如此反复直到评价指标下降明显,剩下的特征则保留。

模型选择方法也比较直觉,#card

  • 使用L1正则训练LR模型,如剔除权重为0的特征;或者训练LR模型,使用单特征输入计算单特征AUC衡量特征重要性;亦或者使用树模型进行自动特征工程,同样也是特征选择的一种,如经典的GBDT、GBDT+LR。

类似 automl 的特征字典

可以考虑维度 #card

  • count:A_COUNT、B_COUNT、A_B_COUNT
    nunique: A_nunqiue_B (按B对称的下文省略)
    ratio: A_B_COUNT/A_COUNT 在A里各个B类所占的比例
    average:A_COUNT/A_nunqiue_B A里各个B类的平均数
    most: A_most_B 在A类里出现最高的B是哪个
    pivot: A_B1_count、A_B2_count A和B类里特定的B1、B2的联合统计
    pivot2: A_B1_count-A_B2_count A的B1行为和B2行为的加减乘除
    stat1: A_stat_A_B_COUNT 基于A_B_COUNT对A的描述,
    stat2 :A_stat_B_COUNT 基于B_COUNT对A的描述,
    序列化:初步LDA,NMF,SVD,进一步Word2Vec,doc2vec 再进一步 图神经网络deepwalk,pPRoNE


类别特征

特征编码#card

  • 特征二元化

  • one-hot

  • [[离散化]]

    • 是否选择

      • 海量离散特征 + 简单模型

      • 少量连续特征 + 复杂模型

    • 分桶

    • 特性

类别特征处理

  • 特征交叉

    • 手动构造二阶或三阶交叉特征#card

      • dnn 隐式交叉弱,不能很好拟合多项式交叉 pattern

      • 内积式交叉只能实现二阶

      • 外积式交叉的层数有限

    • 内积交叉#card

      • [[DeepFM]] [[IPNN]] [[DLRM]]

      • 将特征映射到相同的高维空间,通过内积计算特征之间的相似度达到交叉的效果

      • 缺点

        • 不同类型的向量映射到同一个特征空间,与 [[FFM]] 思想相悖

        • 不同类型特征的维度是相同的

    • 外积交叉#card

      • [[DCN]] [[@xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems]] [[OPNN]]

      • 表达能力比内积强

      • 不同 embedding size 的向量都能支持交叉

      • 缺点

        • 交叉项过多,样本不足容易造成过拟合

        • 计算复杂度高

  • 分桶#card

    • 基于业务理解自定义分桶规则

      • 城市分成华东区、华南区
    • 基于特征的频次合并低频长尾部分

    • 决策树模型

  • 统计编码#card

    • count encoding

      • 统计该类别不同行为类型、不同时间周期内的发生频次
    • Target encoding [[目标编码]]

    • Odds Ratio

    • weight of evidence

  • 特征哈希 Hash Trick #card

    • 避免维护映射表的麻烦

粗排工程优化

1)商品覆盖时效性,#card

  • 因为很多时候商品候选规模在上亿级别,而粗排商品向量对特征变化敏感,回刷频率较高,甚至天级别的全库回刷。

  • 除了工程链路上的优化提效,策略上还可以考虑只对增量和特征有变化商品进行特征向量预测;

  • 另外还可以缩小策略覆盖范围,或只对特定圈定商品生效该粗排策略等。

2)query-user向量塔和item向量塔模型一致性问题,#card

  • 由于双塔模型很多情况下需要频繁训练进行参数更新,在部署过程中可能会遇到query-user向量是版本A模型,而item侧向量是版本B模型的情况。

  • 针对这个问题,一方面可以从工程侧进行模型同步控制进行解决。而在工程架构不能很好支持的情况下,也可以选择在夜晚进行模型更新,降低模型不一致带来的负面影响;

  • 再次一点,可以选择减小模型更新频率,如日更改为周更。而减小更新频率也会损失一定的模型效果,一方面由于低频率更新需要考虑减少使用ID类型特征,以免过度依赖模型的记忆性,另一方面也是因为模型会损失增量更新带来的泛化能力。


粗排样本选择

粗排训练样本选择最简单的可以复用精排模型的样本,#card

  • 一方面复用链路节省资源,

  • 另一方面方便与精排特征对齐,维护简单以及便于联合优化;

然而如上提到的,粗排和精排样本的打分空间分布并不一致,直接使用精排样本训练粗排模型,将会使得粗排模型对于大量少曝光的样本打分存在偏差。#card

  • 常见的缓解方法可以尝试增加随机样本做负样本(或者同类目等限制下随机负采样增加样本难度);

另一种思路则是使粗排尽可能推荐精排偏好的商品,具体实现可以将精排排序topN的样本作为正样本,其他为负样本等方法,#card

  • 此外精排模型蒸馏也可以理解为该思路的一种实现方式。

  • 样本选择空间偏差问题解的决方法不止如此,且无标准答案,很多时候还是需要不断实验改进,才能找到适合自己场景的样本选择方法。


粗排模型评估方法

粗排模型的评估可以参考精排使用AUC作为模型打分能力的判断标准,而由于样本选择偏差等问题,使得AUC有时也不能完全指导粗排模型优化。

另一种可以参考的评估指标是粗排topN和对应精排topN的HitRate,对应HitRate越高,则粗排的排序能力可以看作越接近精排


精排

技术点#card

  • 1、精排模型,主要介绍其演进脉络及各类型模型特点;

  • 2、精排阶段的几个关键点的讨论,包括精排训练数据选择、特征工程、模型评估、分数融合、大模型的lifelong learning、deBais、实时化、工程链路等。


结构化召回

商品结构化信息包括类目、属性等,属性有多个维度如品牌、型号、尺寸、适用性别年龄等。除了直接使用文本索引召回,同样可以直接通过结构化id索引召回。#card

  • 结构化召回通常需要query和item端的同步优化,query侧需要识别出其目标的类目或属性ID,商品侧同样建立相应的ID索引,该方法除了应用到基础召回,通常还用在搜索导航功能,如根据层级类目导购、根据属性进行细选等。

统计特征

统计类特征通常为对用户行为、商品表现等维度的统计值,一般情况可根据情况作为 离散特征或数值型特 征进行变换处理。


老汤模型如何增加新的特征

举个例子,工程实现上,对于LR模型,其权重参数往往以稀疏存储的kv方式进行持久化,新特征权重可以以kv插入的方式动态增加,而不是事先确定好特征的数量。#card

  • 因此,新的特征(如新item_id、price值)对应的权重数量不断增加,模型大小也同样不断增加(大的时候会达到T级别)。

重排动机:更精准打分

实现这个目标有几种常见的思路:#card

  • 1、减少排序候选,使用计算复杂度更高的模型,如使用长序列建模,复杂网络结构的排序建模等;

  • 2、增加链路实效性,如模型实时(online learning)[1]、特征实时等;

  • 3、多目标ensemble,手拍权重,或自动学习多个目标(CTR/CVR等)权重,如[2]使用贝叶斯优化方法进行在线超参数学习。此外还有个性化权重学习,如以点击或成交为目标,使得不同用户或搜索词ensemble权重不一。


面向相关性的向量召回优化

文本向量表征的模型(函数)不同的结构

  • DSSM 全连接网络表征 #card
    • 输入的query和doc首先用词哈希的方法被表示成triple-gram的词袋向量(multi-hot向量,向量大小为词典大小,词出现的位置为1,没出现的位置为0)。

    • 而后接入多层全连接网络,全连接输出query和doc的语义表征向量,并使用cosine相似度来度量二者的匹配分。

    • 最后通过最小化Loss(Pairwise loss、Triple loss、InfoNCE等)使得query和doc的正样本对距离近,负样本对距离相对远

image.png

  • 基于卷积网络

    • CDSSM [2]使用滑动窗口来提取模型输入的n-gram信息,如滑动窗口为3的时候,对每个词都会提取出一个triple-gram表示向量(multi-hot向量),并将所有词的向量拼接得到整个句子的特征输入。#card
      • 而后再经过多层常规的卷积和池化操作,分别得到query和doc的语义表示向量,进而优化正负样本对的距离远近。

image.png

+ 在word embedding技术流行之后,基于卷积的DSSM往往会先将各个词映射成embedding 矩阵,进而对embedding矩阵做多核的卷积池化操作,进一步提升了文本表征的效果 #card

image.png

  • 基于循环神经网络

    • LSTM-DSSM[4]。其结构与经典的DSSM一致,不同在于使用LSTM为encoder提取输入的文本特征。 #card
      image.png
  • 基于BERT

    • Sentence-BERT #card
      image.png

特征

  • 特征增强#card

    • 特征或者数据的增强可以在数据有限的情况下,通过一些简单的变换操作起到变相扩充样本的作用,进而提升文本特征输入的丰富度。同样,即使有足够的数据,特征/数据增强很多时候也能进一步提升模型的鲁棒性。

    • [[NLP 数据增强方法]]

  • 特征融合可以分为两条思路:

    • 特征内部:#card

      • 通过字、词、短语多粒度特征分别建模,而后进行融合来增加特征的丰富度;也可通过字、词、短语分层表示的方式融合多粒度的特征,如ELMO[8]是典型的考虑上下文特征的字、词、短语层级表示结构。
    • 补充特征:#card

      • 除了基础文本特征外,电商场景下有十分的方式补充特征,如融入电商知识(query和商品类目、属性关系等信息);通过行为数据挖掘相同语义的query,对当前query进行信息补充,以缓解短文本信息不足的问题等等。
  • 多模态特征

数据

  • 参考 ### 训练数据

面向成交效率(个性化)的向量召回优化

在向量模型中引入个性化,比较直觉的思路是#card

  • 在模型中引入个性化特征(如性别、地域、购买力、活跃度、商品销售热度等),

  • 或者从训练数据构造上入手(如将数据构造成高成交效率&高相关、相关、不相关三类),

  • 亦或者通过网络结构或策略上的设计(如引入多任务机制等)


3.12 Model Dictionary Compression

QR hashing (Shi et al., 2019) offers a solution by decomposing large matrices into smaller ones using quotient and remainder techniques while preserving embedding uniqueness across IDs. 通过使用商数和余数技术将大矩阵分解为较小的矩阵,同时保持不同 ID 嵌入的唯一性 #card

  • 减少 embedding 词表大小和通过MurmurHash 这样的抗冲突哈希函数消除词表维护需求

Example of non static vocab hashing paradigm #card
image.png


ChangeLog

本页面灵感来自 ChangeLog of Me | cf020031308.github.io

[[2025/04]]

[[2024/12]]

[[2024/01]]

[[2023/12]]

[[2023/11]]

[[2023/10]]

[[2023/08]]

[[2023/07]]

[[2023/03]]

[[2023/02]]

[[2022/12]]

  • [[@翦商:殷周之变与华夏新生]] 历史小说,讲得是夏商周的历史。上古史的参考文献很少,作者亮点在于结合这几十年的考古成果(二里头、殷墟、周原等等)进行创造。翦商出自诗经「后稷之孙,实维太王,居岐之阳,实始翦商。」,意思是周灭商。为什么周要消灭商?商代遗址挖掘发现和甲骨文破译,商人生活中使用大量的人牲进行祭祀(比如房屋用人奠基,墓葬用人陪葬……),而且随着时间推移,祭祀规模越来越大,手段越来越残酷。作者推测周族可能长时间从事给商人捕捉祭祀用的人牲工作,随着周文王被拘和伯邑考被杀,周商矛盾激化,周武王开始伐商。周公旦在武王驾崩后,辅佐成王,创建礼乐制度。后世流传的文献没有直接记录商朝活人祭祀,可能是周公毁掉相关的档案,改写历史。

[[2022/11]]

[[2022/10]]

[[2022/09]]

[[2022/08]]

[[2022/07]]

[[2022/01]]

[[2021/12]]

  • Note

    • [[巨人术]] 两费技能好难受

    • [[OKR]]

    • [[笔记软件]]

    • [[iPad]] 买来看论文(虽然没有这个习惯……),思考如何在日常生活中使用。

  • Paper

    • [[An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale]] Transformer 在 CV 领域应用
  • [[@我的二本学生]] 这本书是作者和学生交流十多年后完成的,整体上按时间顺序给你讲一个又一个人的故事。除了故事之外,也没有给出更多具体的结论。

    • 影响学生的发展大概有下面这三个方面:

        1. 原生家庭,个体很难超越阶级,少部分学生能得到家庭的支持。
        1. 时代命运,从 06 年的学生到 15 年的学生,心态的差异很大一部分是房价带来的。另外,房价也改变很多学生家长的命运。
        1. 个人努力,毕业前有没有自己的目标以及毕业后能不能和自己和解?可惜没有分析学生就读的专业是不是市场所需要的?
    • 最后,读完本书其实不应该感到悲观,书中所写和社会上所说,都是这个群体如何。事实上统计学不对个体负责,还是有机会的

[[2021/11]]

  • [[服务器]]:购入一台腾讯云 2核4G8M 轻量应用服务器。使用宝塔面板管理,实在是太方便了。已经部署 [[Bitwarden]] 密码管理服务以及 [[WordPress]] 博客……

  • Note

    • [[任务术]] 狂野已无「恶魔之钟」,整理一下之前记录的笔记。

    • [[宇宙偶数术]] 10 月上传说卡组,T1 强度,内战靠贪!

    • 先从 [[铁甲战士 开始练习

    • [[生命平衡轮]]

    • [[YJango@学习观]] 很早就收藏的视频,但是一直没有时间看。大概是从机器学习、认知科学角度解释学习,值得仔细看看。

  • Book

    • [[沸腾新十年]]
  • Paper

    • [[BERT]]

    • [[Masked Autoencoders Are Scalable Vision Learners]]

  • People

    • [[chyixian]] 文科博士在读,少数派中分享过几篇和阅读相关的文章

    • [[润Rhuen]] 豆瓣网友,最近在申请博士,每月分享月记。

[[2021/10]]:忙着述职,基本上没有整理什么

  • Game

    • [[佣兵战纪]] 又肝又氪,冲了 200 多连一个火焰队或自然队都没有开出来,pve 快速推图都做不到……弃坑

    • [[杀戮尖塔]] 卡牌 Rogue 游戏,比佣兵战纪不知道好玩多少倍!

  • Book

    • [[创新者]]

[[2021/09]]

  • Note

    • [[宝宝术]] 想不到暴雪这些零费随从都能进构筑,胡的时候还挺强的。

    • [[鬼灵贼]] 练习这种卡组,然后被砍了是不是很伤?

    • [[心火牧]] 一拳超人

    • [[并查集]]

    • [[Life Audit]]

    • [[Beancount]]

    • [[万智牌]]

  • Book

    • [[平面国]]

    • [[哲学的故事]]

[[2021/08]]

  • Note

    • [[password]]

    • [[图论]] 可能只会写一手最短路…

    • [[Things 3]] 印象里面主流的 todo App 就这个没有尝试过,现在正需要一个简单清单软件。重新思考[[任务管理]]。

    • [[炉石传说]] 这游戏也挺氪的

      • [[任务术]] 马术,7 年老玩家第一次上传说!
  • Paper

    • [[Privileged Features Distillation at Taobao Recommendations]]:阿里巴巴优势特征蒸馏

    • [[@Distilling the Knowledge in a Neural Network]]

  • Book

    • [[蛤蟆先生去看心理医生]]
  • Another

    • [[刘汉臣之死]]:听完[[故事 FM]] 阎鹤祥的专集后,特地补一下这段说书。

[[2021/07]]

  • Paper

    • [[Beyond Efficient Transformer for Long Sequence Time-Series Forecasting]]
  • Book

    • [[@苏格拉底之死]]

    • [[哲学家们都干了些什么]]:有关形而上学、科学与人生的意义的讨论。

  • Note

    • [[VS Code]]

    • [[git]]

    • [[中概互联ETF]]

[[2021/03]]

  • Note

    • 20210307 [[数字坟墓]]

    • 20210308 [[OKR]]

    • 20210310 [[OKR 实践]]

    • 20210321 [[Zettelkasten 编码]]

[[2021/01]]

[[2020/05]]

  • [[@呼吸]] 这是一本由 Byte.Coffee 主播 MilkShake 🐑推荐的一本科幻小说集(前几天看其他东西的时候学会科幻小说的英文 sci-fi)。之前看到过,小说的价值在于作者用一个故事告诉你一个道理。最喜欢的是《商人和炼金术士之门》这篇:在传统的穿越小说无法改变未来和过去的基础上,论证穿越能更深刻理解生活。书中其他探讨的几个问题也很有价值,值得一读。

delayed feedback

在广告场景下,cvr 模型是这个问题的典型例子,因为转化是有延迟的,即在点击发生后过一段时间用户可能才会发生转化,且往往转化漏斗越深,延迟的时间越长

  • 这时候有两种选择,#card
    • 一种是等待事件的 label 完全回流再进行训练,比如说事件的真实 label 能在一天内完全回流,做天级训练即可,但是这不符合上面提到的 “及时” 的原则;

    • 另一种则是实时把数据送入模型做 online training,但是这不符合上面提到的 “准确” 的原则,因为有些 label 可能还没回流。而实际上,实时性和准确性也是一个 trade-off 的关系。

Delayed FeedBack In Computational Advertising | 吴良超的学习笔记 (wulc.me) 如何解决 label 回传不及时,样本无偏#card

  • 基本都是解决在 online-training 模式下如何解决 label 回传不及时的问题,如利用 importance sampling 等方法对样本做加权,或者让样本多次进模型,然后从统计意义推导出新的概率表达,从而保证样本是无偏的。

品牌广告

品牌广告往往是一个广告系统发展初期的广告模式,基本流程是广告主先付钱,平台保证曝光,如 cpt,gd 就是典型的品牌广告,前者没什么好说的,固定的广告位在特定位置强出就好了;后者则一般会涉及到库存预估和库存分配两个问题#card

  • 库存预估:gd 承诺的是未来的曝光量,因此需要保证当前售卖的库存不能超过未来的曝光量;一般可以通过时序预估模型来进行预估

  • 库存分配:将库存和 gd 计划作为 supply side 和 demand side 构造二部图,然后通过分配算法进行分配,常见的分配算法有 HWM 和 SHALE

上面的做法只是在解决 gd 广告的保量问题,但是随着优化的精细化,除了保量,还需要考虑一些其他问题,如#card

  • gd 广告和效果广告往往存在竞争关系 (因为曝光的机会是共享且数量是基本固定的), 需要联合效果广告建模使得利益最大化
    gd 广告除了保量,往往客户也会提出效果的要求,否则平台可以把低质流量直接给到 gd 计划;因此,从建模上这成了一个多约束的优化问题

如果额外考虑以上这两点,#card

  • 上面传统的分配算法就有点问题了,首先库存预估出来的量往往是总体的曝光量,gd 能占用其中多少的量需要拍一个数,或者根据 cpm 分配;

  • 其次,上面分配算法是直接把这个曝光给这个 gd 广告的,不会判断质量的好坏,但我们实际是不希望把太差的量给广告主的,同时也不能对竞价有过多的挤压,

  • 因此需要判断流量对于 gd 计划的质量,需要为 gd 计划考虑一种更加灵活的拿量方法。

综上, gd 广告 需要考虑保量、效果、溢价率以及对效果广告的挤压,因此建模时也需要把这些因素考虑进去。


将一个排序的过程拆成了多个阶段来选择 topk 个候选,带来的问题是每个阶段的排序优化目标可能会有割裂

[[@推荐系统技术演进趋势:从召回到排序再到重排]] 召回应该去适配精排 #card

  • 如果在召回阶段使用模型召回,理论上也应该同步采用和排序模型相同的优化目标,尤其是如果排序阶段采用多目标优化的情况下,召回模型也应该对应采取相同的多目标优化。同理,如果整个流程中包含粗排模块,粗排也应该采用和精排相同的多目标优化,几个环节优化目标应保持一致。因为召回和粗排是精排的前置环节,否则,如果优化目标不一致,很可能会出现高质量精排目标,在前置环节就被过滤掉的可能,影响整体效果

[[@Embedding-based Retrieval in Facebook Search]] 精排适配新的召回 #card

  • since the current ranking stages are designed for existing retrieval scenarios, this could result in new results returned from embedding based retrieval to be ranked sub-optimally by the existing rankers

  • 新的 ANN 召回的结果可能并不会被精排认可


广告系统的业务视角

起量

  • 广告投放不起量都是怎么解决的? - 知乎

    • 优化素材、放开定向、提高出价 & 预算、堆计划等。
  • 那么从媒体 / 平台侧的角度来说,有什么手段去缓解广告主起量难的问题么?#card
    +

    • 一般来说,起量难的问题会随着广告候选变多而愈发严峻,而这也可以从 E&E 的角度去解读,因为在 dau 基本稳定的情况下,媒体展示广告的次数是有限的,如果让更多的新计划得到展示机会,势必会挤压老计划,而且新计划起量后,后续能否持续跑量也是个问题,属于 explore 的部分。

    • 因此,一个朴素的思想是固定一些 explore 的 quota,专门用于处于起量阶段的计划,相当于给这些起量阶段的计划开的绿色通道;有了绿色通道后,需要考虑的第二个问题是:哪些计划能通过这些绿色通道?每个计划都给同等的机会显然不是最优的,因为不同计划起量后的表现不一样,因此一种更合理的做法是建模判断这些计划在起量后的表现能力,然后根据表现能力决定计划是否能进绿色通道,同时还需要考虑那些堆计划的 case,避免对相同或只做了微小改动的计划重复进入绿色通道,给更多广告主以探索的机会。

成本

  • 大部分客户投放广告关注的是其 roi(品牌广告其实也可以认为追求的是长期的 roi),而近年各个媒体平台上也出现了各种 roi 类的产品,但是 roi 类的产品要求广告主把付费金额等敏感数据回传,因此大范围推广还需要时间;#card

    • 当前使用更多的是成本类产品,即认为广告主出价是 truthful bidding 的,可以将广告主的出价作为成本,投放过程中尽量让实际成本贴近广告主填的出价。
  • 由于当前的广告系统都是基于 ecpm 排序和扣费的,因此构成 ecpm 的几个元素 (bid, ctr, cvr) 的值必须要准确,才能保证成本不会过高 (广告主亏) 或过低 (媒体亏)

    • 首先需要重点关注的是 ctr、cvr 预估的准确性,而这个问题的难点在于能拿到的训练数据的 label 是 0 和 1 (代表是否点击 / 转化),但是实际中需要预估的是一个 rate,而这导致了没有一个绝对准确的 ground truth,退化成只能通过训练来逼近训练样本中的正负样本的比例,这也是为什么改变了训练样本的分布需要在 loss function 或预估值上做纠偏。另外,从概率论出发,大数定律告诉我们:当样本数量越多,则其算术平均值就有越高的概率接近期望值,但问题是很多计划的的 click、convert 数量非常少,所以训练也没法很好的学习出各个计划的期望 cvr。#card
      +

      • 因此,面对这么一个没有绝对 ground truth,同时大数定律也不完全适用的而带来的预估偏差的问题,需要有额外的策略来应对,最常见的就是上面提到的保序回归,这个也是基于后验数据的统计对预估值做 calibration,因此也需要考虑纠偏粒度上的后验数据是否过少的问题。
    • 另一个关键因素就是出价了,如果预估完全准确的情况下,按照广告主给定的出价来投放是最优的,但这显然是不太可能,因此#card

      • 才有了控制器不断地调价来控制成本,满足保成本的诉求,可以认为出价是预估不准的兜底策略。

冷启动

  • 无论是在广告还是推荐,冷启动都是一个长期存在的问题,其原因是新用户 / 计划缺少历史数据,模型 / 策略对其学习不够充分,从而效果表现得很差;而在广告场景中,新计划比起新用户的冷启动往往是更常见且严峻的,因为对于成熟的媒体而言,dau/mau 等基本都是稳定的,但广告主会不断地新建计划。#card

    • 冷启动往往会加剧上面提到的各类问题,如在模型上,预估值的准确性更难保证;在出价上,成本更难控制等;而针对冷启动的问题,往往也会从两个方面去优化,即模型和策略。
  • 在模型上,有不少针对冷启动的 paper,且基本都是针对 nn 这一类 embedding-based 的模型,其基本思路都是让冷启动 item 的 embedding 贴近 warm-up 阶段的状态,笔者将这类方法归纳成两类

    • (1) 利用 meta-network 为冷启动的 item 生成一个 id embedding#card

      • 第一种方法的基本思想是利用 item 的 meta 信息 (即使冷启动 item 也有) 通过一个小网络 (即 mata-network) 生成 embeddding,然后增加一些 auxiliary task 来训练这个小网络,这些 task 就有很多选择了,更多是对业务的理解,如可以让 meta-network 吐出来的 embedding 与 item 在成熟期的 embedding 误差尽量小 (针对已经步入成熟期的 item 的样本),也可以利用冷启动 item 对网络进行二次的训练等

      • 这种方法的两篇比较典型的 paper 可参考
        Warm Up Cold-start Advertisements: Improving CTR Predictions via Learning to Learn ID Embeddings

      • Learning to Warm Up Cold Item Embeddings for Cold-start Recommendation with Meta Scaling and Shifting Networks

    • (2) 基于 MAML 的方法训练模型,让 embedding 更快收敛#card

      • 第二中方法基本上就是基于 meta learning 的思想,让模型能够更好的 learn to learn,即使对于样本量很少的 item 也能较快学习到,代表方法就是 MAML,可以参考下面两篇 paper,另外,关于 MAML 更通俗的介绍可参考知乎上这篇文章
        Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks
        MeLU- Meta-Learned User Preference Estimator for Cold-Start Recommendation
        上面的方法基本都是让冷启动 item 的 id embedding 能更快收敛,还有另一种方法是将冷启动的 item 的一些更泛化的特征直接加入到模型中,如图像、文本等描述性特征,通过一些 pretrained model (如 VGG、Bert 等) 将其转为 embedding 的模型加入模型中,也是一种常见的套路。
  • 策略上往往也需要对冷启动的计划有额外的举措;

    • 如在冷启动阶段,可以给计划 “绿色通道”, 即一定 explore 的 quota,如同上面提到的起量问题一样 (起量其实也可以算是一个冷启动问题),而这也涉及到老生常谈的 E&E 问题了,#card
      • 一个跟 deep learning 的玄学程度不相上下的领域,这部分内容介绍可参考  [[exploration and exploitation]]

      • 同样地,这些 explore quota 也应该根据每个计划的预期表现给予个性化的分配;即需要识别计划未来的表现,毕竟往往个性化分别比起均分都是最优的。此外,这些 quota 必然会对成熟期的计划造成一定的积压,所以也需要考虑冷启动和成熟期的 trade-off。

  • 除了额外的扶持,冷启动的出价方法也需要额外考虑,#card

    • 因为此时计划的后验数据基本是空的,那怎么才能获取出价调控需要的这些数据呢?这里也有一些思路,比如可不可以利用相似计划的后验数据?或者信任预估,直接对预估值取 sum?或者产品层面就不对冷启动计划做苛刻的成本要求?
  • 同时,在实际产品中,往往也需要联合产品教育广告主,冷启动期间就是会存在不稳定性,更容易出现超成本等问题,#card

    • 而如果客户对平台粘性不高或者整个市场有其他更有竞争力的竞品,这些超成本所带来的损失往往也是需要有平台来承担。

持续跑量

  • 持续跑量可以认为是计划渡过冷启动后,亦即计划进入了成熟期需要面临的问题,因为广告主在投放追求的往往是两个东西:成本和跑量,在成本能控住的前提下,跑量一般是越多越好的,但现状是在不少的媒体上,计划在进入成熟期不久就会掉量,而且往往是掉了之后就再也起不来了,也就是说计划的生命周期较短。

    • 造成这个问题原因有很多,包括但不限于#card
      • 广告主频繁地修改出价、定向、预算等有可能改变计划的稳态
        模型预估的不准确、出价调控不够稳定,可能导致计划突然爆量或掉量
        如果竞价环境比价激烈,那么对于有限的展示机会和不断增加的计划数,部分老计划掉量也是不可避免的
        自然衰减,如计划圈定的人群基本都曝光了,或者创意的自然衰减
        这个问题会往往会导致广告主为了跑量而不断复制新建计划,进一步加剧起量、冷启动等问题,也直接导致竞争环境变得更激烈,系统的机器负载更大,因此,保证计划的持续跑量是所有广告系统都需要解决的重要问题。
  • 抛开第三个比较难改变的因素,针对其他几个原因,有一些思路也许值得借鉴#card

    • 广告主要减少频繁修改计划的定向、出价等操作,这些需要平台教育广告主,至于频率多大算频繁,定向又应该放开到何种程度,需要平台同时实验等手段测试出来,最好能给广告主提供一个参考值
      要尽量减少系统波动等因素对计划的影响,即要减少各中工程和算法的事故的影响,如尽量保证各种 infra 服务的高可用性,AB 实验要更加谨慎,因为这些操作都是有可能影响计划的稳态
      对于要掉量的计划生效额外策略;这里面又可分为两个问题,如识别掉量计划以及对计划做何种策略,这个问题跟冷启动的扶持也很相似

橘子汽水配柠檬水在即刻上的总结

链接: https://m.okjike.com/originalPosts/6732c87fa8855e724b728c9b

这篇主要讲教育系统是如何捕获我们的生命力的?但是我感觉对于职场人、打工人也很有启发,因为系统对人的影响是相似的。

1.什么是生命力? #card

  • 项飙认为生命力不等于行动力,对生命力最重要的是意识和行动力之间的间隔。

  • 比如说你在健身和跑步的时候,身体和心理是可以分开来的。

  • 这类任务让你在做无意义的活动时,可以产生一种“有意义的叙述。”

  • 你可以一边跑步,一边让你的脑子从身体中解放出来,做一种“前因后果”的叙述:我为什么要跑步,我可以跑到什么程度,我达到了我设想的目标吗。

  • 但是现在我们生活和工作中的很多任务,是把人这种停下来进行“有意义叙述”的时间剥夺了。

  • 你的脑子没有停下来,而是一直在执行任务,简而言之就是人被工作碾压了。

  • 人被安排在一个又一个任务里,没有“间隔”,脑子被工作任务过多的占有了。

  • 因此,人也就没有能力从行动中抽身出来,反观自己的行动,从而形成叙述。

2.生命力的捕获和劳动力的捕获有什么不同?

  • 比较有意思的是,这个访谈里对比了两个概念。

  • 第一个概念叫劳动力的捕获,劳动力的捕获会产生 异化异化 会让人产生 批判意识

    • 比如说,一个工厂里的工人,他被异化以后,他可能觉得工作没劲,没意思。当他意识到生产出来的东西是压迫自己的时候,最后就可能引发 **批判和解放 ** 。
  • 第二个概念是生命力的捕获,这种捕获最典型的特征就是 工作 ,不仅占据了你的体力,而且还影响你的意识、注意力、精力等。

    • 简单来说就是你在下班,以后还需要 去思考工作上的事情 。你无法完全从你的任务中抽离出来。甚至还有回家办公,或者说下班以后依旧需要工作的。
    • 这种捕获比起劳动力上的捕获更加的 消耗 人。
      3.通过横向反思和行动空间重建生命力?
  • 横向反思大概的意思,其实也是要抽离出来看待自己的任务。#card

    • 意思就是你在面对一个任务的时候,不要一直想着接下来该怎么办?领导怎么想?我该怎么做?

    • 而是时不时的停下来,想想我在做什么?我为什么要做这个事情?我的状态是什么样的?

  • 行动空间概念可以理解为,你要时刻意识到自己有做其他事情的可能性。#card

    • 你周末可以做些其他的事情,比如和朋友出去玩,去主动地做一些其他的事情,让自己有更多的沉浸式体验。

1.top school Ph.D Student的能量和心力

research 心法总则 #card
image.png

Chonghe Wang(MIT) [[冲气以为和]] #card
image.png

Andrej Karpathy(Stanford) #card

image.png

Helen姐(Princeton Math Ph.D) #card

  • 因为Helen没有实名上网,所以暂时不放真名,但Helen姐(现在在小红书分享)对我的影响是非常深刻的,她的思想非常先进,关于学习和个人发展的认识也非常深刻。这些分享是她早年间在微博分享的(现在可能已经不可见),我整理和收藏了多年。她对于女性科研工作者也有很强烈的鼓舞。

  • 这些分享揭示了Ph.D的本质,和自学成才的本质,不要被虚荣心蒙蔽,不要为了和别人攀比而学习,不要为了学会什么fancy的名词获得什么title而沾沾自喜,避免无效学习,摆脱线性思维,靠自驱力和motivation,不要在意无关人士的评价。这些观点我相信会对很多人都有启发。

image.png

image.png


2.如何对科研的不同阶段建立正确的认知

Haoshu Fang(SJTU-MIT) #card

  • 科研第一阶段是学习技能阶段,但是不要上来打基础就打2年(从CS231n看起,Andrew NG的机器学习看起,深度学习花书看起),不是说看书没用,基础知识都必须全部要学,但是AI是高度实践性的学科,一定要知识结合代码。学习技能阶段最好找到active的senior member合作,具体看下文Fang博士的分享吧,要找到有能力愿意带你的前辈,跟着学。
    Junior阶段怎么让大佬愿意带你?请见我的第一张图分享:

    • 1.态度诚恳,踏实肯干,从帮别人打下手开始,学习别人的工作流程,工作技能,向有结果的人学习

    • 2.long vision:首次合作愉快才会有长期合作机会(重视reputation,不看重一时得失)。最开始不要去斤斤计较几作,是去学习技能的(写文章,投稿)

  • 科研第二阶段是熟练技能以后,开始以共一或独立做project,这一段时间就是Ph.D的training。

  • 科研第三阶段是准教职阶段,提出大的目标/问题,用3-5年完成/回答。

image.png

image.png

Jun Cen(HKUST) #card

  • Cen博士把科研分为了四个阶段,入门摸索阶段-学会科研阶段-精通熟练阶段-合作带人阶段。

  • 相比上面的思路新加了一个合作带人阶段,其实不用等到教职,从Senior Ph.D开始就会接触到这个阶段,学术合作也是很好地拓展自己交际圈和影响力的方式,在带Junior的过程中,训练自己当老师的技能和领导力。

image.png

Sida Peng #card

  • Peng老师在Github分享了非常详细的经验。这些经验高屋建瓴地分享了完成一个reseach project的流程,很有借鉴意义。提出了三种想idea的方式:1.idea-driven 2.goal-driven 3.旧领域+新锤子(新工具,如diffusion, gaussian splatting, mamba等)

image.png

image.png


3.非常具体(hands on)的AI科研目标&经验

Junwei Liang(CMU)

  • 梁老师是我的恩师,从梁老师这里学到了很多东西,作为AI PhD,如何设定目标,以及如何去达到目标。制作Awesome List也是获得影响力的方式,我的Awesome-Mamba-List受梁老师的insights启发。

  • 工业界 or 学术界目标 #card
    image.png

  • 如何去达到目标 #card
    image.png

Guodun Lee(ZJU)

  • [[@普通硕士生的NLP之旅]]

  • @Gordon Lee 是我的好朋友兼人生导师,教会了我非常多的东西,我的第一篇一作工作,虽然现在看来不完美,但也得到了他的很多帮助。Gordon大量总结了自己读研的经验教训,硕士毕业有2A2B工作,虽然他是这个系列唯一一个MS,但我认为他是有PhD水平的。#card

    • 这些经验囊括了AI MS或PhD初级阶段需要的各种技能:阅读论文,做笔记,文献管理,如何社交,如何做开源项目获得影响力,科研失败教训,如何Rebuttal。尤其是社交&做开源项目方面,我受到了他很多影响,并践行到我自己的人生体系里面,这让我交到了很多做学术的朋友们。

Runsheng Xu(UCLA) #card
image.png

image.png

image.png


@普通硕士生的NLP之旅

日常科研经验分享 方向和论文 #card
image.png

日常科研经验分享:读论文和做笔记 #card
image.png

如何提高炼丹能力 #card
image.png

为什么要社交 #card
image.png

开源项目 #card
image.png

我从失败中学到什么 #card
image.png

image.png

image.png


Successful PhD Journey

科研的本质是 项目管理 ,身兼:算法,开发,产品,运营(宣传),Manager(项目排期,进度管理)

我开新Project的流程 #card
image.png

Junior阶段如何找到大佬带你?#card
+

态度诚恳,踏实肯干,从帮别人打下手开始,学习别人的工作流程,工作技能,向有结果的人学习

  • long vision:首次合作愉快才会有长期合作机会(重视reputation,不看重一时得失)

如何面对科研中的挫败和无反馈感?#card
+

绝大多数时候失败,极少数时候成功

git管理:看看git commit次数,每天走之前commit一次,给自己正反馈

  • Notion记录项目开发和实验日志,带时间戳,“可视化”自己的进展和进步

xiaoguang han 如何想 idea #card
image.png


如何建立科研正反馈

1.git管理:看看git commit次数,每天走之前commit一次,给自己正反馈。 #card
image.png

2.Notion记录项目开发和实验日志,带时间戳,“可视化”自己的进展和进步 #card
+

image.png


DCNv2

#card 作者认为 V1 中每层只有 w 和 b 两个 d 维向量要学习,参数容量有限,限制模型的表达能力用 d维方阵替代 w
image.png

image.png

DCN 和 DNN 的连接方案 #card
image.png


Isotonic Calibration Layer in DNN

常规校准方法

  • Platt scaling

  • isotonic regression

isotonic regression layer
image.png

  • ycali =Σi=0i=kRelu(ei+wi)vi+b,vi={ step,  if i<kystepi=ky_{\text {cali }}=\Sigma_{i=0}^{i=k} \operatorname{Relu}\left(e_i+w_i\right) \cdot v_i+b, v_i=\left\{\begin{array}{ll}\text { step, } & \text { if } i<k \\ y-s t e p \cdot & \mathrm{i}=\mathrm{k}\end{array}\right.k=argmaxj(yk=\arg \max _j(y- step j>0)\cdot j>0). #card
    • 分段拟合,对预测值分桶,每个桶一个可训练的权重 wi

    • relu 保证非负

    • ei 由校准特征得到的 embedding


Potential Outcome Framework 简化问题的三个假设

Stable Unit Treatment Value Assumption [[稳定单元干预值假设]]#card

  • 不同个体的潜在结果之间不会有交互影响

  • 干预水平对所有个体一致

  • 单元之间相互独立,一个单元受到的干预不会影响另外一个单元的潜在结果。举一个不满足的反例,某苹果手机降价后销量大涨,相关的手机壳等配件销量也随之上涨,苹果手机和手机壳等就不是独立的,类似地可以用GNN建模该关联。

  • 干预形式是唯一的,对于同一种干预不存在能产生不同潜在结果的其他版本。举一个不满足的反例,如果将降价视为干预,打5折和打9折对销量的影响显然差异巨大,而应该将不同的折扣建模为多值干预。

[[No unmeasured confounders]] 没有未测量的混杂因子#card

  • 可忽略性/非混淆假设(Ignorability / Unconfoundedness Assumption

  • W ⁣ ⁣ ⁣Y(W=0),Y(W=1)XW \perp \!\!\! \perp Y(W=0), Y(W=1) \mid X

  • 给定X,则分配机制与Y无关

  • 如果两个个体的x一样,则无论W是什么,其潜在结果一样

  • 如果两个个体的×一样,则无论潜在结果是什么,它们的分配机制都一样

  • 背景变量包含了所有的混杂因子。如果背景变量仅包含了部分混杂因子,那就无法去除干净伪相关的影响,预测的因果效应就存在高低估问题。不过想要做到这点挺难的,有时候我们都不知道有哪些混杂因子,更别提把它们都包括进来。
    相同背景变量的单元无论受到何种干预其潜在结果也相同,并且无论潜在结果如何其受到的干预机制相同。

Positivity [[正值假设]]#card

  • 干预是确定的,对于任何背景变量的单元,每一种干预的概率大于0。

  • P(W=wX=X)>0wP(W=w \mid X=X)>0 \quad \forall w and xx

  • common support / overlap


ALiBi

思路:ALiBi(Attention with Linear Biases)#card

  • 不向word embedding中添加positional embedding,而是"根据token之间的距离给 attention score 加上一个预设好的偏置矩阵",即直接引入相对位置。

举例:两个token之间存在一个相对位置差1,就加上一个 -1 的偏置,如果token之间的距离越远则这个负数就越大,代表它们之间的相关性更低。#card
image.png

代码 #card
image.png


Residual DCN

image.png

  • 两层 [[DCNv2]] 提供足够的交叉,但是会显著增加训练和推理时间。采用两种策略提高效率 #card

    • replaced the weight matrix with two skinny matrices resembling a low-rank approximation

    • reduced the input feature dimension by replacing sparse one-hot features with embedding-table look-ups, resulting in nearly a 30% reduction.

  • low-rank cross net 中引入注意力机制 #card

    • 通过 temperature 平衡学习到的特征交互复杂度

    • skip connection 和 fine-tuning the attention temperature 有助于学习更复杂的特征俩惯性,并保持稳定的训练。


RoPE

设计目标:通过绝对位置编码的方式实现相对位置编码 #card
image.png

设计思路:在NLP中,通常会通过向量q和k的内积来计算注意力系数(ATTN),如果能够对q、k向量注入位置信息,然后用更新的q、k向量做内积就能丝滑地引入 位置信息 了。
图3-1:RoPE的两种解释(左:直观解释,右:原始推导)#card
image.png

图3-2:RoPE的操作示意图#card
image.png

Transformer升级之路:2、博采众长的旋转式位置编码 - 科学空间|Scientific Spaces


@LLM实践--理解Language Model是如何到PPO的 理论篇

链接:LLM实践–理解Language Model是如何到PPO的 理论篇 - 知乎

在下面的文章里,我们约定,在语言模型的场景下:XDX \sim \mathcal{D} 表示一条文本X采样自数据集D #card

  • 假设我们数据集D只有下面4条文本。

    • X1=X_1= 中国的首都是哪里?北京。

    • X2=X_2= 中国的首都是哪里?中国的首都是北京。

    • X3=X_3= 中国的首都是哪里?中国的首都不是广州和武汉,是北京。

    • X4=X_4= 中国的首都是哪里?中国的首都不是广州,是北京。

  • 约定 xtx_t 表示一条文本中的第 t 个token,x<tx_{<t} 表示所有 t 之前的token。

奖励模型作用 :-> 给定一条文本X,奖励模型可以给这个文本打分 rXr_X ,表示这条文本在人类定义的偏好下的好坏。

  • 奖励模型训练使用这个loss函数: Lreward =logσ(rXchosen rXrejected )\mathcal{L}_{\text {reward }}=-\log \sigma\left(r_{X_{\text {chosen }}}-r_{X_{\text {rejected }}}\right) #card
    • 其中 rXchosen r_{X_{\text {chosen }}}rXrejected r_{X_{\text {rejected }}} 分别表示好,坏文本的奖励分数。一般取每个文本最后一个token的 logits,乘一个shape=[embedding_dim,1]的矩阵,映射成一个1维分数。

    • 从奖励模型的loss上看,模型建模的是相对分数,而不是绝对分数,实际也是如此。

    • 不同domian的分数区间是不同的,很难找到一个统一的阈值划分好坏,所以用的时候一般要伴随使用norm(或者baseline)。

[[@PPO与GRPO中的KL散度近似计算]] 要点

  • 一个是KL散度的方向:假设需要训练的模型是分布 A ,作为基准的分布是分布 B ,从训练分布中采样的 KL(AB)K L(A \| B) 称为正向KL,从基准分布中采样的 KL(BA)K L(B \| A) 称为反向 KL 。 #card

    • 正向 KL 有模式坍塌,反向 KL 会更全面的覆盖基准分布,但是部分概率拟合偏差较大。

    • 在Post-train之前的阶段我会优先使用反向KL,比如预训练,持续训练,蒸馏,因为此时模型学习的目标是尽可能全面的覆盖自然世界知识。

    • 在Post- train我一般优先尝试正向KL,这个时候模式坍塌是不可避免的,也是可接受的。

  • 一个是KL散度的估计方式

    • 为什么有时候使用 [[K2 估计器]] 和 [[K3 估计器]] 替代 [[K1 估计器]] #card
      • 蒙特卡洛估计是无偏的,当采样趋近于无穷的时候估计的就是KL散度本身,但是在采样数量少时方差太大。

      • 离散KL散度本来是非负的,但使用蒙特卡洛估计时值可能为负。所以一个简单的考虑是让估计值非负来减小方差,绝对值估计或 [[K2 估计器]] 。

加权语言模型

  • 观察我们的数据集D,既然我们有一个能给文本打分的reward模型,不妨假设模型会这样给每个条数据打质量分:#card

    • X1X_1 虽然正确,但是太简短了,rX1=1r_{X_1}=1

    • X2X_2 的回答主谓宾完整,质量好于第一条,质量分 rX2=1.5r_{X_2}=1.5

    • X3X_3 虽然也是正确的,但是"不是广州和武汉"明显是冗余的,质量分 rX3=0.5r_{X_3}=0.5

    • X4X_4 正确的且比 X3X_3 废话少一点 rX4=0.7r_{X_4}=0.7

  • 既然训练语料有了质量分,那么一个自然的想法就是让质量更高的文本在训练时的loss重要性高一些,反之则低一点。那么我们可以优化一下语言模型loss,改写成下面的形式:#card

    • Llm=rXlogP(X)=rXt=1TlogP(xtx<t)\mathcal{L}_{l m}=r_X \log P(X)=r_X \sum_{t=1}^T \log P\left(x_t \mid x_{<t}\right)

    • 只要保证r不小于0,新loss函数优化得到的模型就依旧是语言模型。

    • 加权loss等价于对数据进行上、下采样。r=0.5等于在batch中下采样一倍,2等价于上采样一倍。所以只要数据集没有问题,加权loss训练的模型也不会崩。(这是理论上的情况,在实际中rejection sampling连加权都没有,也能给模型训崩,这个我们放在实验篇讨论)

Policy-base 强化学习

  • 基于策略的强化学习优化目标和加权语言模型 loss 对比 #card
    • 形式上一致

      • 强化学习 J(πθ)=Eτπθ[R(τ)logPθ(τ)]J\left(\pi_\theta\right)=E_{\tau \sim \pi_\theta}\left[R(\tau) \log P_\theta(\tau)\right]

      • 语言模型 L=EXD[rXlogP(X)]\mathcal{L}=E_{X \sim \mathcal{D}}\left[r_X \log P(X)\right]

    • 区别是一个数据数据采样自模型,一个采样自数据集

过程监督

  • 如何奖励模型能对每一个 token 打分,加权语言模型 loss 改写成 #card

    • L=t=1TrtlogP(xtx<t)\mathcal{L}=\sum_{t=1}^T r_t \log P\left(x_t \mid x_{<t}\right)
    • rXr_X 移动到求和符号里面变成针对每个token的细粒度分数 rtr_t
  • 一旦计算token级别的权重,这个loss优化出来模型就已经不是统计意义上的语言模型了,因为这是对每个token做不同的上、下采样。#card

    • 通俗理解:把一句话说两遍这句话还是自然语言,但是把一句话话中的某个字说丙扁这就不不是正常的语言了。另外,就算是文本级别的权重,如果取负值,那么优化的目标将不再是最大化对数似然,自然模型也不是语言模型。

    • 一旦loss是非语言模型loss,训练就有可能崩溃,因为此时模型的优化目标并不是“模型依概率采样出一句话”,优化目标和我们的采样行为出现了gap。

    • 此时就需要在基础loss上引入KL散度约束。此刻起优化目标彻底脱离“最大化数据的对数似然”,变为“最大化奖励的期望”。

    • 在这之后我会称呼我们正在训练的这个用来说话的模型为策略模型。

  • L=t=1TrtlogP(xtx<t)\mathcal{L}=\sum_{t=1}^T r_t \log P\left(x_t \mid x_{<t}\right)
    学习目标的意义是 :-> 当采样一个token的分数 rt 为正,就会增加这个token的概率,分值越高增加的程度就越高。反之如果 rt 为负,则减小这个token的概率。

    • 这个目标包含的马尔可夫假设 #card
      • 即当token序列为 x<tx_{<t} ,采样这个动作 P(xtx<t)P\left(x_t \mid x_{<t}\right) 只影响 xtx_{\leq t} 的奖励,只要 xtx_{\leq t} 的奖励 rtr_t 高,P(xtx<t)P\left(x_t \mid x_{<t}\right) 就好。

      • 马尔可夫假设是个很强的假设,很少有这么理想的情况

  • X3=X_3= 中国的首都是哪里?中国的首都不是广州和武汉,是北京。
    中一个“不”字不仅让“中国的首都不”的奖励降低,还让后面“是广州和武汉”这么多token帮着往回拐。所以采样的token不仅应该对自己负责,还应该对后续token的奖励负责。将 loss 改成 #card

    • G(xt)=i=tTriG\left(x_t\right)=\sum_{i=t}^T r_iL=t=1TG(xt)logP(xtx<t)\mathcal{L}=\sum_{t=1}^T G\left(x_t\right) \log P\left(x_t \mid x_{<t}\right)
  • G(xt)=i=tTriG\left(x_t\right)=\sum_{i=t}^T r_iL=t=1TG(xt)logP(xtx<t)\mathcal{L}=\sum_{t=1}^T G\left(x_t\right) \log P\left(x_t \mid x_{<t}\right)
    loss 的含义 #card

    • 当采样一个token xtx_t 后,这个token之后所有token的总奖励分数 G(xt)G\left(x_t\right) 为正,就会增加这个token的概率,分值越高增加的程度就越高。反之则降低这个token的概率。

    • 在强化相关的算法中,我们会看到很多 i=tT\sum_{i=t}^T 而不是更常见的 i=1T\sum_{i=1}^T ,基本都是源于这种"向后负责"的思想。

  • 再进一步,一个token对后续每个token负的责也不都是一样的,直觉上应该是距离当前位置越远,token对其负责越少。所以我们改造一下奖励的累计方法:#card

    • G(xt)=i=tTγitriG\left(x_t\right)=\sum_{i=t}^T \gamma^{i-t} r_i

    • γ\gamma 是一个0-1之间的超参,越大表示对后续token负责越多,趋近于 0 表示不对后续负责, 1 表示对后续负全部责任。这个改造后的累计函数就是我们之后实际使用的累计函数,在强化中也称为回报(return)。

Baseline

#card 观察图中给出的例子,由于这句话整体是正确的,所以虽然有一些废话token分数不高,但也都是正的。相当于所有token的概率都在增加,只不过不好的token增加的慢一点。这样只有等到其他更好的token概率足够高了,才能消灭掉不好的token。显然这样的学习效率很低,甚至可以说是错误的,这些错误token的概率就不应该增加。所以我们可以给这些分数做一个中心化,全部减去一个值,让分数有正有负,更明显的区分出好坏,公式可以表示为:
+ L=t=1T[G(xt)b]logP(xtx<t)\mathcal{L}=\sum_{t=1}^T\left[G\left(x_t\right)-b\right] \log P\left(x_t \mid x_{<t}\right)

+ 减去的这个值,我们就称它为baseline。之所以叫baseline,是因为这是一句话的“基准”,它表示了一句话的平均好坏,如果这个句子是模型采样生成的,则也表示这个模型现有的平均能力。
  • 在很多地方,我们会看到说减去baseline的作用是降低方差。哪里来的方差,为什么要降低方差?#card
    • 在强化的训练过程中,训练使用的文本是采样出来的。假设我每次都采样两条进行训练,某一次采样出了 X2X_2X3, X2X_3, ~ X_2 完全正确,每个token都是1.5分。

      • 那么训练时"中国的首都->是"的概率以 1.5 倍的强度提升,"中国的首都->不"以 0.5 倍的强度提升,经过softmax归一化以后,相当于在降低"不"的概率,模型整体的学习方向还是正确的。
    • 但是如果我只采样一条数据训练,且不幸采到了 X3X_3 ,那么"不"的概率将提升,模型的学习方向是错误的。这并不是说采样采的不对,也不是奖励模型打分错了。

    • 而是当采样次数不够多时,分数无法准确的反应奖励模型真正希望模型去改进的方向(不是"不是广州和武汉"是错的,而是奖励模型更想要不废话的答案)。

    • 这个奖励模型希望我们改进的方向是期望,而采样与这个期望的距离就是我们所说的方差。在micro-batch梯度下降这种优化方式下,过大的方差会导致模型无法收敛。

既然减去baseline作用这么大,下面我们就看看这个baseline应该怎么确定。一个朴素的想法是,用每个token的平均分作为baseline。
image.png

+ 比如图中这些token的平均分是0.76,那么减去之后每个token的分数变成:#card
  + 这样该正的正,该负的负,更符合我们的期望了。

+ 但是这么做有个问题,如果仅使用每条数据自己的均值,就意味着一个句子中的token必定有正有负。#card
  + 这会导致好句子中有部分token的概率会下降,坏句子还是有一部分token概率会上升。

  + 为了更加准确的估算这个baseline,我们应该将视野扩大,不仅关注一个token在一条数据中的相对好坏,更要从整个数据集的角度看一个token是好是坏。

在统计学中,整体的角度就是指期望。我们可以尝试计算文本中每个token的期望回报 E[G(xt)]E\left[G\left(x_t\right)\right] 。用数据集D举例说明一下这个期望分数是怎么算出来的:
image.png

+ 上表是我们数据集中的4条数据。最后一列是在最开始"加权语言模型"这一节中给出的文本级别的分数。#card
  + 为了好算,我假设一句话中每个token的回报都等于这句话的reward,也就是 $G\left(x_t\right)=r_T$

  + (这个假设等价于只给最后一个token打分,其他都是 0 ,并且 $\gamma$ 为 1 。

  + 这是可以实现的假设,并且也确实是实际会用到的一个假设)。

+ 计算 $X_4$ 中每个token的期望回报 $E\left[G\left(x_t\right)\right]:$

  + $E\left[G\left(x_1^4\right)\right]=E[G( 中 )]$ ,这里需要理解的一点是 $E\left[G\left(x_t\right)\right]$ 和 $G\left(x_t\right)$ 是错位的关系。#card
    + $G\left(x_t\right)$ 表达的是采样了 $x_t$ 后的回报。

    + 而 E 是期望,期望就意味着是取遍了 $x_t$ 所有可能的值后计算出的平均,它反应的其实是 $x_t$ 的前缀 $x_{<t}$ 的回报。

    + G (中)的前缀为空,所以就是整个数据集的均分 $=\frac{1+1.5+0.7+0.5}{4} \approx 0.93$

  + $E\left[G\left(x_2^4\right)\right]=E[G( 中国 )]$ ,#card
    + 也就是计算所有第 1 个token为"中"的数据的平均回报。

    + X2, X3,X4三条数据满足要求,所以平均回报是 $\frac{1.5+0.7+0.5}{3}=0.9$

  + $E\left[G\left(x_3^4\right)\right]=E[G( 中国的 )]$ #card
    + ,也就是计算所有前 2 个token为"中国"的数据的平均回报。

    + $\mathrm{X} 2, ~ \mathrm{X} 3, ~ \mathrm{X} 4$ 三条数据满足要求,平均回报是 $\frac{1.5+0.7+0.5}{3}=0.9$

  + $E\left[G\left(x_7^4\right)\right]=E[G(中国的首都不是)]$ ,#card
    + 这个时候只剩下X3,X4满足要求,平均回报= $\frac{0.7+0.5}{2}=0.6$

  + #card $E\left[G\left(x_{11}^4\right)\right]=E[G(中国的首都不是广州,是)]$ ,
    + 这个时候只剩下X4满足要求,平均回报 $=0.7$

  + 观察X4,会发现前几个token"中国的首都"都是对的,但是减去期望后分数却是负的 -0.2 。这种不合理来自于#card
    + 我们将 $\gamma$ 设定为 1 。这就导致"中国的首都"几个字要为后面的"不是..."负全部责任。
  • 当使用期望作为baseline时,策略模型的loss函数写成:L=t=1T[G(xt)E[G(xt)]]logP(xtx<t)\mathcal{L}=\sum_{t=1}^T\left[G\left(x_t\right)-E\left[G\left(x_t\right)\right]\right] \log P\left(x_t \mid x_{<t}\right)

    • 理解一下这个loss函数: #card

      • G(xt)G\left(x_t\right) 表示的是采样了 xtx_t 后的句子有多好。

      • E[G(xt)]E\left[G\left(x_t\right)\right] 表示还没有采样 xtx_t 时前缀有多好。

      • 如果采样 xtx_t 后句子比采样之前更好(差值为正),就说明这个采样是好的,则增加概率,反之则减小概率。

    • 这个loss是理想的目标,但是在实际RLHF训练的过程中,我们无法计算 E[G(x)]E[G(x)] ,因为#card

      • RLHF时answer都是实时生成的。

      • 只有SFT,RS,DPO这种固定训练集的算法能计算出整个数据集的期望。

      • 没有办法计算就只能想办法近似。

  • L=t=1T[G(xt)B(xt)]logP(xtx<t)\mathcal{L}=\sum_{t=1}^T\left[G\left(x_t\right)-B\left(x_t\right)\right] \log P\left(x_t \mid x_{<t}\right),用函数 B(x)B(x) 来近似计算 E[G(x)]E[G(x)]

    • 近似函数可以怎么设计 #card

      • 用贪婪采样的句子奖励来近似模型的"平均能力":B(x)=rXMAXE[G(X)]B(x)=r_{X_{M A X}} \sim E[G(X)] ,这就是ReMAX。

      • 可以对一个prompt采样多个answer (X1,X2,XG)\left(X_1, X_2, \ldots X_G\right) ,然后用平均奖励来近似: B(x)=i=1GrXiGE[G(X)]B(x)=\frac{\sum_{i=1}^G r_{X_i}}{G} \sim E[G(X)] ,这就是GRPO。

      • 如果在计算平均奖励时,"扣掉"正要训练的这条数据,计算除此之外其他文本的奖励均值,就是RLOO。

    • 这种基于采样的近似方法有个特点,因为采样就会导致新的baseline answer Xbaseline X_{\text {baseline }} 和我们要训练的数据长度不一致,因此没有办法按位对齐回报和baseline。#card

      • 所以这一类算法的 G(xt)G\left(x_t\right) 可以带脚标 t ,表示每个token的回报不同,但是 B(x)B(x) 都是不带脚标 t 的,算整个 answer的reward。
  • 有这么多种baseline的选择,那种好呢?一般评判baseline可以用两个指标:#card

    • 期望和方差。好的baseline应该不改变原始优化目标梯度的期望,并且能够减小方差。
  • 是否能够不改变梯度期望比较好证明:#card

    • EθL=Eθt=1T[G(xt)B(xt)]logP(xtx<t)=t=1T[EθG(xt)logP(xtx<t)EθB(xt)logP(xtx<t)]\begin{aligned} E \nabla_\theta \mathcal{L} & =E \nabla_\theta \sum_{t=1}^T\left[G\left(x_t\right)-B\left(x_t\right)\right] \log P\left(x_t \mid x_{<t}\right) \\ & =\sum_{t=1}^T\left[E \nabla_\theta G\left(x_t\right) \log P\left(x_t \mid x_{<t}\right)-E \nabla_\theta B\left(x_t\right) \log P\left(x_t \mid x_{<t}\right)\right]\end{aligned}

    • 只需要证明后面一项 EθB(xt)logP(xtx<t)=0E \nabla_\theta B\left(x_t\right) \log P\left(x_t \mid x_{<t}\right)=0 ,就能说明没有改变期望。用一下上文提到的对数求导技巧:

E \nabla_\theta B\left(x_t\right) \log P\left(x_t \mid x_{<t}\right) & =B\left(x_t\right) E \nabla_\theta \log P\left(x_t \mid x_{<t}\right) \
& =B\left(x_t\right) \sum P\left(x_t \mid x_{<t}\right) \nabla_\theta \log P\left(x_t \mid x_{<t}\right) \
& =B\left(x_t\right) \sum \nabla_\theta P\left(x_t \mid x_{<t}\right) \
& =B\left(x_t\right) \nabla_\theta \sum P\left(x_t \mid x_{<t}\right) \
& =B\left(x_t\right) \nabla_\theta 1 \
& =0
\end{aligned}

+ 也就是说只要 $B\left(x_t\right)$ 与 $\nabla_\theta, E_{x_t \sim P\left(x_t \mid x_{<t}\right)}$ 无关,可以从求导和期望符号里提出来,这一项就为 0 。 + 比如ReMax中, b 是贪婪采样的answer奖励 $r_{X_{M A X}}$ 。 $X_{M A X}$ 和正在训练的句子是无关的,奖励模型也无关,所 B 就可以提到前面。 + 再比如RLOO,b是除训练文本之外的其他文本的奖励均值,所以也可以提出来。 + 但是GRPO计算时,b是包含正在训练的文本的奖励均值,就提不出来。 + 至于方差是否降低则各有各的证明方法,这就麻烦去看各个论文的原始推导吧。 ## 价值函数 + 除了这种用采样来逼近 $E[G(x)]$ 的思路,还有另一种深度学习中也很常见的思路:算不出来的东西,就用 **模型** 去拟合。 + $\mathcal{L}=\sum_{t=1}^T\left[G\left(x_t\right)-V\left(x_t\right)\right] \log P\left(x_t \mid x_{<t}\right)$,用一个模型去拟合 $G$ 的期望 $V_\zeta(x) \sim E[G(x)]$ + V在强化学习中称为 **状态价值函数** ,模型称为critic模型。在训练策略模型时,critic是不训练的,可以视为常数baseline。 + 那critic模型怎么训练呢?critic模型是在预测 $E[G(x)]$ ,这是一个典型的回归任务,那么就可以用 :-> 均方差损失来优化 $\mathcal{L}=\sum_{t=1}^T \frac{1}{2}\left(E\left[G\left(x_t\right)\right]-V\left(x_t\right)\right)^2$ + 这里又有 $E[G(x)]$ ,所以还是老办法,用采样来近似,#card + 这不过这里不需要向上面那样既采样训练用的answer,又采样baseline的answer了,直接用训练answer就可以了: + $\mathcal{L} \approx \frac{1}{2 N} \sum_{i=1}^N \sum_{t=1}^T\left(G\left(x_t^i\right)-V\left(x_t^i\right)\right)^2$ + 这个训练目标理论上是可行的,但是实际训练时这种方法比较难优化。 + id:: 67ffd3f6-13d1-49bf-9fa9-e767d9c30d2b

V\left(x_t\right) \sim E\left[G\left(x_t\right)\right]=E\left(r_t+\gamma r_{t+1}+\gamma^2 r_{t+2}+\ldots+\gamma^{T-t} r_T\right)

#card + $V\left(x_t\right)$ 需要去拟合的这个 $E\left[G\left(x_t\right)\right]$ 是 r 的累加,和所有随机采样的 $x_t, x_{t+1}, \ldots, x_T$ 都有关。这里随机变量太多,比较难优化。这就相当于diffusion 模型从 $z^t$ 一步预测所有 $z^{t-1}, \ldots z^0$ ,语言模型从 $x_t$ 一步预测出 $x_{t+1}, \ldots x_T$ 。语言模型的做法是只预测下一个 token,那这里我们也想办法让V只预测一步。 + $G\left(x_{t+1}\right)$ 的表达式为: +

G\left(x_{t+1}\right)=r_{t+1}+\gamma r_{t+2}+\ldots+\gamma^{T-t-1} r_T

+ 带入 $G\left(x_t\right)$ 的表达式: +

G\left(x_t\right)=r_t+\gamma G\left(x_{t+1}\right)

+再代入到V的公式中:+ + 再代入到 V 的公式中: +

\begin{aligned}
V\left(x_t\right) \sim E\left[G\left(x_t\right)\right] & =E\left(r_t+\gamma G\left(x_{t+1}\right)\right) \
& =E\left(r_t\right)+\gamma E\left[G\left(x_{t+1}\right)\right] \
& =E\left(r_t\right)+\gamma V\left(x_{t+1}\right)
\end{aligned}

+ 老样子这还是一个回归任务,用均方差损失,$E\left(r_t\right)$ 用采样来近似, + $\mathcal{L}=\frac{1}{2}\left(E\left(r_t\right)+\gamma V\left(x_{t+1}\right)-V\left(x_t\right)\right)^2 \approx \frac{1}{2}\left(r_t+\gamma V\left(x_{t+1}\right)-V\left(x_t\right)\right)^2$ + 这种将一次采样所有再进行拟合的训练方式,转化为采样一步+函数下一步的值来近似的方法:$G\left(x_t\right) \rightarrow r_t+V\left(x_{t+1}\right)$ ,就叫做时序差分法(Temporal Difference)。#card + 本质上来说这种方法存在的意义就是为了降低随机性,也就是降低方差。 + 当 $V\left(x_t\right)$ 是 $E\left[G\left(x_t\right)\right]$ 的无偏估计时,TD法也是蒙特卡洛法的无偏估计。 + 但是事实上 $V\left(x_t\right)$ 做不到无偏估计 $E\left[G\left(x_t\right)\right]$ ,所以TD法也是有偏的。 ## 优势/动作价值函数/状态价值函数 + 策略函数的loss $\mathcal{L}=\sum_{t=1}^T\left[G\left(x_t\right)-V\left(x_t\right)\right] \log P\left(x_t \mid x_{<t}\right)$ + 同样的动机(降低方差),同样的形式,我们也用TD法改造一下:#card + $\mathcal{L}=\sum_{t=1}^T\left[r_t+\gamma V\left(x_{t+1}\right)-V\left(x_t\right)\right] \log P\left(x_t \mid x_{<t}\right)$ + $\mathcal{L}=\sum_{t=1}^T\left[r_t+\gamma V\left(x_{t+1}\right)-V\left(x_t\right)\right] \log P\left(x_t \mid x_{<t}\right)$ 到 $\mathcal{L}=\sum_{t=1}^T A\left(x_t\right) \log P\left(x_t \mid x_{<t}\right)$ + 这里面的 V 我们已经说过了,它叫状态价值函数,表达的是 :-> 没有采样 $x_t$ 时句子的回报。 + 我们记:$Q\left(x_t\right)=r_t+\gamma V\left(x_{t+1}\right)$ ,称为动作价值函数,表示 :-> 执行了"采样 $x_t$"这个动作后句子的回报。 + 记:$A\left(x_t\right)=Q\left(x_t\right)-V\left(x_t\right)$ ,称为优势,表示 :-> "采样 $x_t$"这个动作相比于没有采样时的优势。 ## [[GAE]] + 表示时序差分 $\mathrm{T}-\mathrm{t}+1$ 步的近似,也就相当于完全通过采样来近似,就等于 $G\left(x_t\right)$ #card + 看到我们的动作价值函数: +

Q\left(x_t\right)=r_t+\gamma V\left(x_{t+1}\right)

+将这个函数记为:+ + 将这个函数记为: +

T D(1)=Q\left(x_t\right)=r_t+\gamma V\left(x_{t+1}\right)

+ 表示时序差分一步对 $G\left(x_t\right)$ 的近似,那么TD(2): +

T D(2)=r_t+\gamma r_{t+1}+\gamma^2 V\left(x_{t+2}\right)

+表示时序差分2步的近似,以此类推TDTt1):+ + 表示时序差分 2 步的近似,以此类推TD(T-t+1): +

\begin{aligned}
T D(T-t+1) & =r_t+\gamma r_{t+1}+\ldots+\gamma^{T-t} r_T \
& =G\left(x_t\right)
\end{aligned}

+ 之前我们提到过,$T D(1)$ 是有偏的,偏差来自于 V 的偏差,但是它的随机变量少,方差低。随着TD函数的递增,采样越来越多,方差越来越大,但是 V 的占比越来越小,偏差越来越小,直到彻底变为 $G\left(x_t\right)$ 。两种方法各有各的好,对于这种"多个方法各有各的好"的情况,一个常见的做法是找 n 个和为 1 的系数,乘在每个方法上求加权和。看下面这种加权法:#card + $(1-\lambda) \sum_{n=1}^{\infty} \lambda^{n-1} T D(n)=(1-\lambda) T D(1)+(1-\lambda) \lambda T D(2)+\ldots +(1-\lambda) \lambda^{\infty} T D(\infty)$ + 首先把系数拿出来是一个几何级数 $(1-\lambda) \sum_{i=0}^{\infty} \lambda^i$ ,在 $\lambda<1$ 时收敛,系数和确实为 1。 + 再看每一项,当 $\lambda$ 越趋近于 0 时,$T D(0)$ 的占比越大,当 $\lambda$ 趋近于 1 时,$T D(\infty)$ 的占比越大。通过调控 $\lambda$ ,可以控制是用方差更小的时序差分法,还是偏差更小的蒙塔卡罗法。将这种"我全都要"方法带入优势的计算公式,就是广义优势估计: +

\hat{A}\left(x_t\right)=\left[(1-\lambda) \sum_{n=1}^{T-t} \lambda^{n-1} T D(n)\right]-V\left(x_t\right)

+ 这种写法是为了方便理解广义优势估计是如何平衡TD法和蒙特卡洛法的,实际使用的时候,下面这个公式更方便计算:#card +

\delta_t=r_t+\gamma V\left(x_{t+1}\right)-V\left(x_t\right)

+ +

\hat{A}\left(x_t\right)=\sum_{l=0}^{\infty}(\gamma \lambda)^l \delta_{t+l}

+ 引入GAE后策略模型的loss函数为:#card + $\mathcal{L}=\sum_{t=1}^T \hat{A}\left(x_t\right) \log P\left(x_t \mid x_{<t}\right)$ ## [\[\[重要性采样\]\]](/post/logseq/Importance%20Sampling.html) + 当有两个支撑集相同但概率密度不同的分布A、B时,可以在其中一个分布上采样,并利用修正系数,计算出另一个分布上的期望。 + 在训练的过程中为什么会存在两个有差异的分布?#card + 这就要从训练的方法上说起。在实际训练过程中,我们会先 根据rollout batch size采样出一批QA数据,然后再以 train batch size从这些QA中采样数据进行训练。这个 rollout batch size一般会大于 train batch size,也就是说train一个batch后,模型的参数更新了,但是rollout的数据还没训完,还得接着训。 + 这个时候rollout出来的数据是train这一个batch之前的模型采样出来的,这就导致采样模型和训练模型出现了偏差。rollout之所以会大于train是为了增大推理时的吞吐,提高推理效率。 + 但是这个推理过程其实可以被cover掉,比如我最近写的框架就将infer和train重叠了。 + 现在最新的vllm支持了sleep,且megatron和vllm的模型切分方式是相同的,理想情况是megatron将优化器卸载,通过共享内存将参数传递给vllm进程,原地转为vllm推理,然后vllm再sleep原地转megatron训练,性能更高。 + 所以rollout batch size现在也不是非要大于train。另一个可能的差异来源是一次rollout训多个epoch,这个就没办法了。 ## CLIP + 这个截断目的不是真的要把修正系数限制在某一个范围,而是要抛弃修正系数上下溢的数据不进行训练。 #card + 首先假设 $A$ 为正数,如果修正系数上溢,则被截断为 $1+\epsilon$ ,此时截断项比未截断项更小,会被min函数选中。如果下溢,截断项大于未截断项,截断项不会被选中。 + 截断后是没有梯度回传的,所以截断项被选中意味着这条数据被抛弃了。 + 理解一下:当A为正数,意味着应该增大 $x_t$ 的概率。如果此时发生上溢,则表示相比于采样模型,策略模型对 $x_t$ 的概率增加的已经很多了,不要再增加了。 + 如果下溢表示增加的还不够多,还可以继续增加。 + 如果 $A$ 为负数,逻辑也正好反过来。 ## Reference + 开头提到了KL散度,但是我们还没提PPO是怎么用的。之前还埋了一个伏笔,我们说把给整个句子打分的reward升级成了给每个token打分的reward,也没说是怎么升级的。其实在PRM之前没人升级这个,reward还是只给最后一个token打分,其他token的分数其实是用KL散度打的:#card + $r_t=\beta\left(K L\left(P_{\text {policy }} \mid P_{\text {reference }}\right)\right)=-\beta \log \frac{P_{\text {policy }}\left(x_t\right)}{P_{\text {reference }}\left(x_t\right)}$ + $\beta$ 是一个0-1之间的系数,当策略模型的概率高于reference,则r为负降低概率,反之则增加概率。也就是说这里KL散度是被乘在概率上了。当然另一种做法就是像GRPO那样,直接在策略loss之外单独加一个KLloss,这也是KL loss常见的用法。这两种方法的差异我感觉理解的还是太透彻,希望有其他大佬能够解惑。 + 另外这里还涉及一个小细节,就是critic模型在训练的时候,可以选择拟合这个算了 kl 的 reward,也可以拟合没有加上kl的reward,我倾向于不算。 ## 评论区 + 从您这学习到很多,有一个问题想要请教一下。对于GRPO这种将KL项提出来的,那么同一个response的每个token的Advantage是不是都一样了呢,是不是就是您所说的加权语言损失。。。 谢谢! #card + 不一样,是语言模型loss有两个要求,一个是sentence粒度权重,一个是权重非负,grpo不满足权重非负。 引入kl确实可以视为一种token粒度的奖励,但是这个奖励意义到底是什么,是否真的需要是需要讨论的。事实上我们现在一般不怎么加kl了,加kl权重也很小,千分之一万分之一这种。 + 突然发现引入kl本身是不是就会对不同token带来不同影响呀,不知道我的理解对不对 + 想请教老师一个问题,GRPO对比RF++,前者是在一个问题内采样的多个轨迹上算baseline,后者我不是很清楚,它是相当于有一个batch size=n的问题,每个问题采样一个(?)轨迹,然后n个问题-轨迹得到的reward计算baseline吗?#card + grpo和reinforce++的本质区别应该是是group norm vs batch norm。至于kl放在哪里,每个prompt是采样一个response还是多个都是可调超参。 + 此刻起优化目标彻底脱离“最大化数据的对数似然”,变为“最大化奖励的期望” `` 这句话该怎么理解呢?#card + 只要模型还是在最大化对数似然,就还是语言模型,loss本身不会导致模型说不出人话。对于模型的优化,还是以数据正确性为主而不是训练稳定性。 在变为最大化奖励之后,模型的唯一目标就是追求高奖励,可以用不说人话、hack等等一切方式提高奖励。这个时候就要开始考虑训练稳定性了。 + 但实践中碍于各种因素影响,也不是说最大化对数似然就一定不会崩,比如on-policy的rejection sampling,模型依旧可能崩。这个原因比较复杂,我打算下一篇实验篇再展开。 +


@一文搞懂SuperMemo的基本元素及其与渐进阅读的联系

链接: 一文搞懂SuperMemo的基本元素及其与渐进阅读的联系 - 知乎

Concept

  • woz本人的概念组 #card
    • 他的概念组里既有像『生物学(Biology)』这样的学科大分类,也有像『着凉而感冒(catch a cold from cold)』这样聚焦的具体主题

image.png

  • category:predecessor of concepts in older SuperMemos. No longer used in SuperMemo 17. A category used to mean a named branch of the knowledge tree to which elements belonging to a given class of knowledge were added. For example, you might have keep categories such as: General Knowledge , Family , Internet , Job , etc. Now you can accomplish the same with concepts #card
    • 类别:旧版SuperMemo中概念的前身。在SuperMemo 17中已不再使用。类别曾经是指知识树的一个命名分支,属于某一类知识的元素被添加到该分支中。例如,你可能会保留一些类别,如。常识、家庭、互联网、工作,等等。现在你可以用概念完成同样的工作

@为什么最近几年,没人在推荐系统里去玩 GNN 模型,GNN 是凉透了吗?

[[@曾经火热的Graph Embedding和GNN在推荐系统上还有前途吗?]]

雨飞:GNN的本质是抽取图里面的信息,找到物品和用户之间潜在的关系,说白了相当于去找用户与物品之间多跳的潜在联系,所以这种模式本身还是做用户和物品的特征。#card

  • 这样你就会发现,在之前的推荐系统中,我们已经添加过很多用户侧、物品侧的特征以及两者的交叉特征,而GNN还是加入的是这种特征,因此学习信号太弱了,整体带来的收益就不会很明显,甚至说反而引入了复杂结构而导致效果下降或者推理速度下降。

  • 当然这并不是说GNN就一定没有收益,比如某一些用户行为不充分的场景下,使用图链接的方式可以补充一些行为数据。潜在的问题就是,有更简单的,比如node2vec、line等方法也可以做图的embedding,速度快,效果也还算可以。因此,GNN在有限的成本以及时间的要求下,基本不会是最优或者次优的选择了。


@看DeepSeek R1的论文时,我突然想起了AlphaGo

看DeepSeek R1的论文时,我突然想起了AlphaGo - 知乎

R1的reward模型就给我留下了深刻印象:基于规则的奖励模型。

  • R1在文中提到,自己为什么没有用PRM:#card

    • 第一,在一般推理中,明确界定细粒度的推理步骤比较困难。

    • 第二,判断当前推理中间步骤是否正确非常困难。使用模型进行自动标注差强人意,而手动标注不利于扩大规模。

    • 第三,一引入基于模型的 PRM,就不可避免地会有奖励劫持问题,动态重训奖励模型资源开销大。

  • 因为从事LLM之初,我首先负责的是预训练,所以一个方法能否 scaling up 成为了我后面做持续训练、post-train时,评估这个方法最终能不能work并上到线上模型的重要维度(事实也证明,这样的方法基本都是work的),所以我很认同第二点。#card

    • 虽然现在有很多MC构造数据训练PRM的方法可以scaling up,但是前段时间qwen 数学推理的论文也提到了MC的方法就是会有幻觉,不如llm as judge,更不如人类标注,这里R1索性不用PRM了。

    • 但是r1因为要避免reward hacking,直接连基于模型的ORM都抛弃了,我觉得还是有魄力的。毕竟有不少工作表明了稠密reward在抗噪和提点方面的优势。

    • 但是仔细想想,其实qwen的那篇论文也提到了ORM有一定的PRM的特性,其实也会出幻觉(hacking)。

对于模型主体训练,R1使用了一个多阶段策略:#card

  • 首先利用base 模型+ 一些prompt + rule-based reward ,跳过SFT直接上GRPO强化,目标是让reward提升,也就是提升做题准确率。这个过程中模型的输出不断变长,开始学会反思,但是这个阶段的推理过程很难理解。这个时候的模型命名为R1 Zero

  • 第二步利用 R1 Zero 生成数据进行RS,留下推理过程正常的。再混合一些非推理数据,对base 模型SFT,再上强化,得到最终的R1。

首先能够直接在base模型上RL我不是很意外,因为我们现在都会把SFT数据加到pretrain里。比如qwen系列的pretrain模型,调一调prompt,基本的指令是能follow的。而且模型越贴近pretrain,幻觉越少这一点也让我看好这种做法。#card

  • 其次是看到模型自然的产生反思我也不是很意外,在我做的一些RLHF的实验中,模型只要输出能够变长,经常能看到自然的出现反思,不过我的反思大多最终反思出一个错误的结果。

  • 我猜测是因为如果模型输出有变长的趋势,在输出完答案后,自然会用剩下的“额度”去check答案对不对。不过这两年的大模型经验也让我认识到一点,模型一个能力的“涌现”,必定是训过这种类型的数据。所以根本问题其实是为什么强化能在采样的过程中采出这种response,以及为什么模型可以学会这种response而不是更多的去学别的response。(强化的时候模型的输出为什么变长或变短,为什么学了这种类型而没学另一种类型的response,探索稳定训练的症结所在,正好是我最近的研究内容,希望能有个明确的结果)

另一个是关于GRPO使用的KL loss。这个KL loss不是像 PPO 一样加在 reward 里乘在概率上,而是单独减去这个KL loss。并且这个KL loss 使用了 [[K3 估计器]] 估计,而不是直接用蒙特卡洛估计。#card

  • 我在做RLHF、蒸馏、自约束等需要KL loss的方法时也发现,当使用乘性KL时,比如将KL蕴含在reward分数里,乘在动作的对数概率上:

& r_{x_t}=\operatorname{reward}\left(x_{<t}\right)-\beta K L(\theta | \text { ref }) \
& J=f\left(r_{x_t}\right) \log \pi_\theta\left(x_t\right)
\end{aligned}

+可以采用蒙特卡洛估计的KL,允许KL估计值为负:+ + 可以采用蒙特卡洛估计的KL,允许KL估计值为负: +

K L(\theta | r e f)=E_{x_t \sim \pi_\theta} \log \frac{\pi_\theta\left(x_t\right)}{\pi_{r e f}\left(x_t\right)} \approx \frac{1}{N} \sum_{x_t} \log \frac{\pi_\theta\left(x_t\right)}{\pi_{r e f}\left(x_t\right)}

+但是当最终loss使用加性KL时:+ + 但是当最终loss使用加性KL时: +

J=f\left(r_{x_t}\right) l o g \pi_\theta\left(x_t\right)-\beta K L(\theta | r e f)

+ 一旦不是计算全词表KL,而是采样计算KL,基本都需要确保低方差KL的方案,不能再使用蒙塔卡洛估计。可以使用GRPO中的K3估计器,甚至直接上个绝对值或者平方都比蒙塔卡洛估计效果好。 为什么想起了AlphaGo#card + 其实我不是在读到R1后面说从AlphaGo汲取灵感,使用MCTS但是失败了这里想到的AlphaGo。我是看到 R1 zero 到 R1 这里想起AlphaGo到AlphaZero。这正好是一个相反的过程。AlphGo用模仿学习+强化训出了一个极强的AI,然后抛弃人类,直接自我博弈产生了AlphaZero。我记得之前听一些下围棋的同学说过,他们看AlphaZero的开局看不懂,不建议跟AlphaZero学围棋。deepseek使用Zero进行冷启,但是Zero的思考过程难以理解,所以从zero生成的数据中拒绝采样,留下一部分规整的数据SFT+RL产出正式版R1。 + 所以我这里擅自猜测,deepseek会不会是先用SFT+RL训了一版,然后再训出的Zero,发现Zero效果喜人才拿来做RS训出正式的R1。 + 另一个点是GRPO、RLOO这种采样多次作为baseline的做法,相比于贪婪采样和一次采样+value function,更像AlphaGo的MCTS。不过可惜的是deepseek的探索失败了。


hexo-deployer-cos-cdn

刷新 COS CDN 缓存报错


ppxu 讲解例子

Nature 的封面是关于一种印度洋中部的查戈斯群岛上的一种名为“红脚鲣鸟”的海鸟,这种鸟在在矮灌木及小乔木上结群营巢。#card
image.png

image.png

Science 封面提到了两个核心概念:中微子和耀变体。#card
image.png

image.png

image.png

  • 为了探测中微子,科学家们在南极洲建立了“冰立方中微子观测站”。一些直径约为 35cm 的,圆形的数字光模块被放置到冰面以下 2.5 千米的地方。超过 5000 个数字光模块形成了一个巨大的一平方公里的探测器。这些数字光模块可以检测到高能中微子与冰相互作用中释放的极其微弱的光。最终科学家们利用“冰立方”检测到了来自耀变体的中微子。


猴子和打字机

另一个在流行文化中占了很大分量的思想实验是 “无限猴子定理”,也叫做“猴子和打字机” 实验。定理的内容是 :-> 如果无数多的猴子在无数多的打字机上随机的打字,并持续无限久的时间,那么在某个时候,它们必然会打出莎士比亚的全部著作。

  • 猴子和打字机的设想在 20 世纪初被法国数学家 Emile Borel 推广,但其基本思想—— 无数多的人员和无数多的时间能产生任何 / 所有东西 ——可以追溯至亚里士多德。
    简单来说,“猴子和打字机”定理是用来描述 无限的本质 的最好方法之一。#card

  • 人的大脑很难想象无限的空间和无限的时间,无限猴子定理可以帮助理解这些概念可以达到的宽度。

  • 猴子能碰巧写出《哈姆雷特》这看上去似乎是违反直觉,但实际上在数学上是可以证明的。

  • 这个定理本身在现实生活中是不可能重现的,但这并没有阻止某些人的尝试:2003 年,一家英国动物园的科学家们 “试验” 了无限猴子定理,他们把一台电脑和一个键盘放进灵长类园区。

    • 可惜的是,猴子们并没有打出什么十四行诗。

    • 根据研究者,它们只打出了 5 页几乎完全是字母 “s” 的纸。

Das 曰:二十年前第一次看到这个思想试验,是在一个日本人写的小册子里。名字忘了,是《五角丛书》中的一本。十年前翻箱倒柜找这本小册子,未果。谁如果保存着二十年前那本五角丛书的话,不妨转让给 das,你五毛钱买的,我出一枚袁大头,或者一个紫砂壶也行。#card

  • 不需要无限多个猴子,不需要无限长的时间,房间里放一台打字机,然后关一只猴子进去,猴子碰巧也会跳到打字机上,碰巧也会打出几个字母,有人计算过,假以 2000 亿年,从概率上讲,猴子会打出一首莎士比亚的十四行诗。

  • 这道理很简单:猴子随意踩踏打字机,总会打出一些字母,这些字母随意组合,只要字母足够多,总会有一些单词,只要单词足够多,总会有一些句子,只要句子足够多,总会有一些有意义的句子,有意义的句子足够多,总会有一首诗,诗足够多,总会有一首十四行诗,十四行诗足够多,总会有一首和莎士比亚的作品一摸一样。

  • 这道理简单明了,就是一些概率和排列组合的简单计算。

  • 但是我有一点想不通,猴子比大自然聪明多了,人体比十四行诗复杂多了,猴子胡蒙瞎碰,打一首十四行诗都要 2000 亿年,大自然胡蒙瞎碰,打造个人体却只用了 50 亿年。究竟是我疯了,还是达尔文疯了?

  • 现在还不清楚,反正两个人总有一个疯了。


@我的笔记管理法 | Randy's Blog

链接: (lutaonan.com)

想法

  • 框架都差不多,就是你没有去整理自己的方法论,最值得参考的一点,笔记中所有的收藏链接都需要写上你的注释 [[PARA/实践]]

[[稍后读]] #card

  • [[习惯养成]] 每周整理 Readwise/简悦中保存的文章和高亮,打上标签和写清楚为什么要收集。

  • 我会根据这篇文章的内容打一些 tag, 这样等到将来我需要写关于某个主题的文章时,可以在 Readwise Reader 里通过标签直接找到关于这个主题的文章。

  • 我还会在这篇文章加上注释 —— 为什么我想读这篇文章?我想从这篇文章里得到什么?我会强迫自己添加一篇稍后读的文章的时候思考这个问题,并且用十几个字简单地描述。这样当我在之后读这篇文章的时候,我可以带着我的问题去阅读,这样会更有效率。

[[PARA]]

  • Areas 指的是你感兴趣的领域,比如理财、编程、职业规划、商业等等。#card
    image.png

  • Resources 指的是在未来可能会有用途的东西,我的理解是那些你可能会用到的,将来可以立刻作为参考的东西。比如最近我会看到很多关于 Prompt Engineering 的东西,虽然这不是我的领域,但我觉得将来会有用,所以我的 Logseq 里会有#card
    image.png

Questions 分类 [[Dozen]] #card

  • 读到这个故事的时候我非常受启发,我觉得的确是要把做的笔记也归纳到自己在思考的问题那里。这样日积月累,我的问题下面的笔记就会越来越多,多个笔记串起来会对我的问题更有帮助。

  • 我还建立了 Questions 这个分类,我把一直在困扰我的一些问题都建起了相应的页面,当我在记笔记时,如果觉得这个笔记和我的某个问题有关,就会链接过去。

image.png


FM

自动特征交叉,解决特征稀疏

FM 与其他模型对比

  • 可以模拟二阶多项式核的 [[SVM]]、MF、SVD++

    • [[SVM]] 训练和预测需要计算核矩阵,核矩阵的复杂度是 N 方

    • MF 扩展性没有 FM 好,只有 u 和 i 两类特征

与 [[SVM]] 对比

  • 二阶多项式内核 SVM 二元交叉特征 wij 相互独立

    • fm 参数 nk,svm 参数 nn,更适合大规模稀疏特征,泛化能力更强
  • 核方法需要计算核矩阵

  • 样本 :-> FM 预测和训练样本独立,SVM 和支持向量有关

  • FM 在原始形式下 进行优化学习,非线性SVM通常需要在 对偶形式 下进行
    交叉项需不需要乘 value ?

  • eta 放到 xi 和 xj 泛化能力不好

FM 如何加入 index embedding?

对比 FM 和 SVM 有什么区别?

  • 特征角度 :-> 二阶多项式内核 SVM 二元交叉特征 wij 相互独立
    , ((6302f9ee-11be-4f7a-9cf9-26400d6d4601))
    为什么要用 FTRL 优化 FM #card

  • FTRL 是 SGD 算法,离线调参,减少线上风险

  • 稀疏特征, 自适应学习率效果最好(特征 i 在 t 轮迭代的学习率不同)

  • 不同特征有不同的学习速度、收敛速度快

[[Ref]]


@DCMT: A Direct Entire-Space Causal Multi-Task Framework for Post-Click Conversion Estimation

主要参考作者在知乎文章:ICDE 2023 论文解读 | DCMT:基于因果纠偏的直接全空间多任务转化率预测模型 - 知乎

DCMT模型(A Direct Entire-Space Causal Multi-Task Framework for Post-Click Conversion Estimation),核心的因果关系图 #card
image.png

需要直接在全曝光空间去纠偏,而不是只在点击空间(例如IPW)或者间接在全曝光空间(DR)上纠偏。

  • 在全曝光空间训练模型的好处就是 #card

    • (1)数据稀疏问题得到缓解

    • (2)训练空间和推断空间直接对齐了

  • 在全曝光空间训练CVR模型存在最大的瓶颈问题就是:#card

    • (1)全曝光空间里,对于转化任务而言,存在大量的假负样本。在全曝光空间里,由于不存在“未点击->转化”这样的正样本,这些样本会混在“未点击->未转化”样本中充当假负样本。这些假负样本可能仅仅是因为曝光位置、曝光风格原因,没有被用户察觉到或者点击到。但是如果这些样本被用户点击了,是可以转化的。如果在全曝光空间训练,CVR模型过度拟合这些真假难辨的转化负样本,CVR的预测结果则会偏低。

    • (2)另外,在全曝光样本空间直接训练CVR模型,选择偏差问题仍然存在。所以需要在全曝光空间进行纠偏而不单单在点击空间进行纠偏(如IPW和DR)。这是因为,如果我们认同IPW的思想,即在点击样本空间,点击倾向性会对点击空间样本造成选择偏差。那么在未点击空间,同样也会有不点击倾向性导致选择偏差。

由于受到用户在做转化决策的过程的启发,我们提出了事实样本空间(factual space)和反事实样本空间(counterfactual space)的概念。这里的事实空间和反事实空间如下图所示
image.png

  • 从概率角度去分析,如果一个用户 uiu_i 购买(转化)一个物品/服务 vjv_j 的概率是 pi,jp_{i, j} ,那么不转化的概率就是 1pi,j1-p_{i, j} 。假设用户最终决定购买,即转化标签 ri,j=1r_{i, j}=1 ,那么我们能得到一个事实的正样本 <ri,j=1,oi,j=1,xi,j><r_{i, j}=1, o_{i, j}=1, x_{i, j}> 。然而这个时候,#card
    • <ri,j=0,oi,j=1,xi,j><r_{i, j}=0, o_{i, j}=1, x_{i, j}> 这个负样本则就不会在事实空间里被观察到了。上面已经分析过了,这个负样本实际上本应该是有 1pi,j1-p_{i, j} 的概率出现的。

    • 在我们的反事实机制里,这样的负样本,<ri,j=0,oi,j=1,xi,j><r_{i, j}=0, o_{i, j}=1, x_{i, j}> ,则会存在于反事实空间中。

    • 我们DCMT模型除了利用事实空间的点击空间 O\mathcal{O} 样本来预测事实的CVR,还会利用反事实的点击空间 N\mathcal{N}^* 样本(事实的未点击样本状态取反而得)来预测反事实CVR。

    • 同时通过以上的分析,我们发现,事实的CVR预测值和反事实的 CVR预测值之和应该与 1 的误差要最小。

[[DCMT 模型]]

[[DCMT CVR Loss]]

[[DCMT 无偏估计证明]]

由于逆倾向加权,如果点击率预测值很小或很大,我们的DCMT对应factual loss或counterfactual loss的权重变得很大很大。因此我们也和传统的IPW方法一样采用了Self-Normalization策略。对应的逆倾向权重改成了#card

  • factual loss部分:1cˉi,j(i,j)O1o^i,j\frac{\frac{1}{\bar{c}_{i, j}}}{\sum_{(i, j) \in \mathcal{O}} \frac{1}{\hat{o}_{i, j}}}

  • counterfactual loss部分:11σ^i,j(i,j)N11o^i,j\frac{\frac{1}{1-\hat{\sigma}_{i, j}}}{\sum_{(i, j) \in \mathcal{N}^*} \frac{1}{1-\hat{o}_{i, j}}}

[[在线实验CVR分布对比]]

[[主要超参对DCMT的影响]]

[[用DR实现CVR建模]]

  • 优点 #card
    • 这样做的好处是 o^i,j\hat{o}_{i, j}e^i,j\hat{e}_{i, j} 只要有一个预测准确,那么DR就能确保CVR无偏估计。另一个隐性的优点是,MTL-DR一定程度上实现全空间的无偏估计,这是因为imputation任务可以在全曝光空间训练。MTL-DR作者的理解是,imputation任务可以利用全曝光空间预测来的cvr loss来帮助CVR任务进行全曝光空间纠偏。

    • 具体无偏证明如下:

& \text { Bias }^{\text {MTL-DR }}=\left|E_{\mathcal{O}}\left(\mathcal{E}^{\text {MTL-DR }}\right)-\mathcal{E}^{\text {ground-truth }}\right| \
& =\left|\frac{1}{|\mathcal{D}|} \sum_{(i, j) \in \mathcal{D}}\left(\hat{e}{i, j}+\frac{o{i, j} \delta_{i, j}}{\hat{o}{i, j}}\right)-\frac{1}{|\mathcal{D}|} \sum{(i, j) \in \mathcal{D}} e_{i, j}\right| \
& =\frac{1}{|\mathcal{D}|}\left|\sum_{(i, j) \in \mathcal{D}} \frac{\hat{e}{i, j} \hat{o}{i, j}+o_{i, j} \delta_{i, j}-\hat{o}{i, j} e{i, j}}{\hat{o}{i, j}}\right| \
& =\frac{1}{|\mathcal{D}|}\left|\sum
{(i, j) \in \mathcal{D}} \frac{\left(o_{i, j}-\hat{o}{i, j}\right) \delta{i, j}}{\hat{o}_{i, j}}\right|=0 .
\end{aligned}

+ 前提条件是:$o_{i, j}-\hat{o}_{i, j}=0$ 或者 $\delta_{i, j}=e_{i, j}-\hat{e}_{i, j}=0$ ,即 $\hat{o}_{i, j}$ 和 $\hat{e}_{i, j}$ 只要有一个预测准确。 + 缺点 #card + 然而上述这种利用imputation任务间接地在全曝光空间纠偏的策略,没有理论以及实验证明它的有效性。实际上,在DCMT工作的实验部分,我们通过实验验证了MTL-DR模型的CVR预测分布,发现没有全曝光样本空间纠偏的效果(具体见下文实验结果部分)。这里可能的原因是:虽然IPW、DR在点击空间纠偏了,把点击率偏高的样本cvr loss的权重调低了,但是能进入点击空间的的点击率普遍偏高,整体调低了也比较难纠偏到随机点击后分布。只有给点击率偏低的未点击空间样本一个较大的权重,这样才有调整整体分布并趋向于随机点击后分布的可能。另外,MTL-DR的无偏的前提条件,在现实环境中,这两个预测值没有一个能确保预测准,因此DR模型的CVR估计的无偏性很难说比IPW好多少。 [[用IPS实现CVR建模]] + 核心思想:IPW的纠偏策略就是给传统CVR loss进行加权纠偏,对应的权重就是 $1 / p(o=1 \mid x), p(o=1 \mid x)$ 就是用户的点击倾向性(点击率预测值)。因此,基于倾向性的因果纠偏模型也需要利用多任务学习框架来分别预测点击率,点击后转化率。#card + 并通过点击率预测值来给转化任务的loss加一个权重来实现纠偏。这里整个纠偏过程就是为了得到上述的 $p(r=1 \mid d o(o=1), x)$ 。 + 因此IPW模型对应的cvr loss function如下: $\mathcal{E}^{\mathrm{IPW}}=\frac{1}{|\mathcal{D}|} \sum_{(i, j) \in \mathcal{D}} \frac{o_{i, j} e\left(r_{i, j}, \hat{r}_{i, j}\right)}{\hat{p}_{i, j}}$ ,其中 $\mathcal{D}$ 是全曝光样本空间,$o_{i, j}$ 就是点击标签,$e\left(r_{i, j}, \hat{r}_{i, j}\right)$ 就是模型转化率预测误差,$\hat{p}_{i, j}$ 就是点击倾向性。 + 在多任务框架下,cvr loss function则变成 $\mathcal{E}^{\mathrm{MTL}-\mathrm{IPW}}=\frac{1}{|\mathcal{D}|} \sum_{(i, j) \in \mathcal{D}} \frac{o_{i, j} e\left(r_{i, j}, \hat{r}_{i, j}\right)}{\hat{o}_{i, j}}=\frac{1}{|\mathcal{D}|} \sum_{(i, j) \in \mathcal{O}} \frac{e\left(r_{i, j}, \hat{r}_{i, j}\right)}{\hat{o}_{i, j}}$ ,其中 $\mathcal{O}$ 表示点击样本空间,上面的点击倾向性 $\hat{p}_{i, j}$ 也被替代成点击任务的预测值 $\hat{o}_{i, j}$ 。 + 优点:点击空间纠偏,实现条件无偏估计 #card + 我们先给出IPW条件无偏的证明过程。 + 首先,先假设我们能够得到所有的转化标签,即能够观察到所有样本的转化情况,因此我们就能得到转化率预测误差的 ground-truth: +

\mathcal{E}^{\text {ground-truth }}=\mathcal{E}(R, \hat{R})=\frac{1}{|\mathcal{D}|} \sum_{(i, j) \in \mathcal{D}} e\left(r_{i, j}, \hat{r}_{i, j}\right)

+接下来我们比较MTLIPW模型的转化率误差与groundtruth之间的差异:+ + 接下来我们比较MTL-IPW模型的转化率误差与ground-truth之间的差异: +

\begin{aligned}
& \text { Bias }^{\text {MTL-IPW }}=\left|E_{\mathcal{O}}\left(\mathcal{E}^{\text {MTL-IPW }}\right)-\mathcal{E}^{\text {ground-truth }}\right| \
& =\left|\frac{1}{|\mathcal{D}|} \sum_{(i, j) \in \mathcal{D}} \frac{o_{i, j}\left(r_{i, j}, \hat{r}{i, j}\right)}{\hat{o}{i, j}}-\frac{1}{|\mathcal{D}|} \sum_{(i, j) \in \mathcal{D}} e\left(r_{i, j}, \hat{r}{i, j}\right)\right| \
& =\frac{1}{|\mathcal{D}|}\left|\sum
{(i, j) \in \mathcal{D}}\left(\frac{o_{i, j}}{\hat{o}{i, j}}-1\right) e\left(r{i, j}, \hat{r}_{i, j}\right)\right|=0 .
\end{aligned}

+ 也就是 $\frac{o_{i, j}}{\hat{o}_{i, j}}-1=0$ ,即 $o_{i, j}=\hat{o}_{i, j}$(点击率预测准确),就可以确保IPW纠偏后的CVR loss是与 ground-truch的CVR loss-致的。所以IPW无偏估计的前提条件就是点击率预测准确。 + 缺点:没有在全曝光空间上训练转化率模型。#card + 上面的 $\mathcal{E}^{\text {MTL-IPW }}$ 公式也很明显的说明了,IPW只计算点击样本空间 $\mathcal{O}$ 的 CVR loss。


@Embedding-based Retrieval in Facebook Search

image.png

  • 除了主要的文本特征,还增加了user和doc的位置、社交关系的side info增强 query和doc 的匹配能力。
  • 模型的训练目标#card
    • 为双塔输出向量的距离,使正样本对距离尽可能小(相似度分数尽可能大),负样本对距离尽可能大(相似度分数尽可能小)。

    • [[Triplet Loss]]

基线模型的样本构造也比较简单,使用query-doc的点击pair对作为正样本对,负样本有两种选择:#card

  • 随机负采样:对每一个query随机从doc池中采样相应比例的负样本。

  • 曝光未点击的样本:对于每一个query,随机从session内曝光未点击的样本作为负样本。

  • 文中实验显示前者的效果明显强于后者,原因在于后者使得训练样本和后续预测样本有明显的分布不一致,即存在严重的样本选择偏差问题。

向量召回问题

  • 候选集离线训练和线上服务的压力

  • matching 问题

[[新召回往往会存在后链路低估的问题,如何克服这个问题带来增量?]] #card

  • 将召回生成的embedding作为ranking阶段的特征,可以直接将embedding作为特征或者计算query和doc的embedding各种相似度,通过大量实验证明,consine similarity有较好的结果。

  • 为了解决向量召回准确率较低的问题,将向量召回的结果直接进行人工标注,然后再基于标注的结果进行训练。这种方法比较暴力并且效率比较低。

Ref


@位置编码之路:SIN->RoPE->ALiBi->PI->NKT->YARN

链接: 位置编码之路:SIN->RoPE->ALiBi->PI->NKT->YARN - 知乎

想法

SIN [[Positional Encoding]]

  • 图1-1:正弦位置编码形式的由来 #card
    image.png

  • 图1-2:正弦位置编码中θ的由来 #card
    image.png

  • 图1-3:正弦位置编码的特点+推导 #card
    image.png

  • 缺点 :-> sin位置编码表示相对位置关系时仍然比较间接。

[[ALiBi]](基于线性偏差的注意力机制)

[[RoPE]](旋转位置编码)

  • 2021年,RoPE(Rotary Position Embedding)诞生,它借助了复数的思想,出发点是通过绝对位置编码的方式实现相对位置编码。

[[Position Interpolation]]

[[Neural Tangent Kernel]]

[[YARN]]

六种位置编码方法总结

image.png
occlusion:: eyIuLi9hc3NldHMvaW1hZ2VfMTc0NTE1OTk0NzQ0N18wLnBuZyI6eyJjb25maWciOnt9LCJlbGVtZW50cyI6W3sibGVmdCI6MjI3LjAzMzYwMTg2NTM5MDUyLCJ0b3AiOjM4My4xODY3MDEyODI3NjA3NCwid2lkdGgiOjM3MC4zNTQyMTQ1MDIxODY0NCwiaGVpZ2h0IjoxNTQuNjY2MjMxMDk5MjAzMywiYW5nbGUiOjAsImNJZCI6MX0seyJsZWZ0Ijo3NDYuMzExNDA1NjMxNTY5MiwidG9wIjoxMTYuNDYzODQyNTczNTY2NjIsIndpZHRoIjo0NTEuNjM0MjE5ODgxMTU5NzcsImhlaWdodCI6MTc1LjA0NzA0MTM0MDEzMjk1LCJhbmdsZSI6MCwiY0lkIjoyfSx7ImxlZnQiOjc0NC4wNjI3OTAwNDQyMTE0LCJ0b3AiOjYzNC41MTgyOTE1ODkxMDgsIndpZHRoIjo0NTYuMTMxNDUxMDU1ODc1MzUsImhlaWdodCI6MTY1LjA2Nzk1NzY2Mzk2NzI2LCJhbmdsZSI6MCwiY0lkIjozfSx7ImxlZnQiOjEzMDYuOTQ0NjM2ODI0MjMsInRvcCI6MzUyLjM1NjY0NjQxMzkxNTMsIndpZHRoIjo0NTYuODY5MDU4NTc5MjU5NywiaGVpZ2h0IjoxNjkuNjg0MDc2NTQ4MDM0MjMsImFuZ2xlIjowLCJjSWQiOjR9LHsibGVmdCI6MTMyMy4wNTk4NTQ1NjA0ODUsInRvcCI6NjM0Ljc1NzI5Mzg3NTcwMTksIndpZHRoIjo0NzEuMjk4NDQwMzExMzg4MywiaGVpZ2h0IjoxNjQuNTg5OTUzMDkwNzc5NTUsImFuZ2xlIjowLCJjSWQiOjV9LHsibGVmdCI6MTMwOS4zMDYxMDE4NzY2MDY2LCJ0b3AiOjk2MS41MDg5MTI1MzAxNjg1LCJ3aWR0aCI6NDY1LjQ3NzUwNDgxODY4ODY2LCJoZWlnaHQiOjE3Ny40MDQ3NzcwNTEyNzI3MywiYW5nbGUiOjAsImNJZCI6Nn1dfX0=


DCMT CVR Loss

image.png

  • 第一块是factual loss :-> (i,j)Oe(ri,j,r^i,j)o^i,j\sum_{(i, j) \in \mathcal{O}} \frac{e\left(r_{i, j}, \hat{r}_{i, j}\right)}{\hat{o}_{i, j}} 是事实CVR预测值与事实点击空间样本 O\mathcal{O} 之间的误差。这边的误差函数是log loss。

  • 第二块是counterfactual loss :-> (i,j)Ne(ri,j,r^i,j)1o^i,j\sum_{(i, j) \in \mathcal{N}^*} \frac{e\left(r_{i, j}^*, \hat{r}_{i, j}^*\right)}{1-\hat{o}_{i, j}} ,是反事实CVR预测值与反事实点击空间 N\mathcal{N}^*(事实未点击空间的镜像空间)样本之间的误差。

  • 第三块是counterfactual regularizer :-> 1(r^i,j+r^i,j)\left|1-\left(\hat{r}_{i, j}+\hat{r}_{i, j}^*\right)\right| ,即上面所述的软性约束 r^i,j+r^i,j1\hat{r}_{i, j}+\hat{r}_{i, j}^* \approx 1

  • 如图所示,我们的DCMT的CVR任务部分,形成了一个有效的纠偏链路。
    image.png
    occlusion:: eyIuLi9hc3NldHMvaW1hZ2VfMTc0NDM4NDk4MjAyMV8wLnBuZyI6eyJjb25maWciOnt9LCJlbGVtZW50cyI6W3sibGVmdCI6MzM4LjMzMTY4ODA2NTMwNzksInRvcCI6MzYuMjk5Mjc1NTE0NTI4Miwid2lkdGgiOjI0Mi4zNjQ0MDcxNjA1NDI4NywiaGVpZ2h0IjoyNS4xMjY2OTY2NzI3ODc4NCwiYW5nbGUiOjAsImNJZCI6MX0seyJsZWZ0IjoyNzcuMTU1Mzk5MTEyODUwMywidG9wIjo1MDguNzg5NzAxMzE3NzEzOCwid2lkdGgiOjIxNi4xNjg1MzEyODAyNTEsImhlaWdodCI6MzAuOTc1NzQ5NDM0NTE3ODYyLCJhbmdsZSI6MCwiY0lkIjoxfV19fQ==
    +

  • 优点:

    • 在全曝光空间做逆倾向加权,可以利用全曝光样本空间数据来训练我们的CVR任务,使得训练空间和推断空间对齐。也可以缓解选择偏差(或者NMAR问题)。#card

      • 通过 EDCMT\mathcal{E}^{D C M T} 公式可知,我们直接在事实点击空间 O\mathcal{O} 进行逆倾向纠偏(这里的逆点击倾向权重是 1/o^i,j1 / \hat{o}_{i, j}
      • 我们直接在反事实的点击空间 N\mathcal{N}^*(即事实的未点击空间的镜像)也进行了逆倾向纠偏(这里的反事实空间的逆点击倾向权重就是事实空间的逆不点击倾向权重 1/(1o^i,j)1 /\left(1-\hat{o}_{i, j}\right) )。
    • (2)而软性约束的最大作用是可以缓解假负样本的问题。例如在事实未点击空间 N\mathcal{N} 有一个样本

      • 如果这个样本是个假负样本,那么 1(r^i,j+r^i,j)\left|1-\left(\hat{r}_{i, j}+\hat{r}_{i, j}^*\right)\right| 值比较大,则说明对于这个样本而言,事实CVR预测值 r^i,j\hat{r}_{i, j} 和反事实CVR预测值 r^i,j\hat{r}_{i, j}^* 之间存在矛盾(不符合先验知识)。

      • 这是因为,这个假负样本本应该进入到事实点击转化空间的,然而却进入了事实未点击空间,所以事实CVR预测值 r^i,j\hat{r}_{i, j} 预测值会被拉低。

      • 而它对应的反事实CVR预测值 r^i,j\hat{r}_{i, j}^* 也不会太高,因为这个样本进入反事实点击转化空间的概率也不应该很高。所以 1(r^i,j+r^i,j)\left|1-\left(\hat{r}_{i, j}+\hat{r}_{i, j}^*\right)\right| 值会比较大。

      • DCMT通过最小化 1(r^i,j+r^i,j)\left|1-\left(\hat{r}_{i, j}+\hat{r}_{i, j}^*\right)\right| 这个软性约束会去纠正假负样本对应的 r^i,j\hat{r}_{i, j} ,使得它更大,从而接近真实值。


DCMT 模型

image.png

  • 整体的目标公式是 :-> L(θ)=ECTR+wcvrEDCMT+wctcvrECTCVR+λ2θF2L(\theta)=\mathcal{E}^{\mathrm{CTR}}+w^{c v r} \mathcal{E}^{\mathrm{DCMT}}+w^{c t c v r} \mathcal{E}^{\mathrm{CTCVR}}+\lambda_2\|\theta\|_F^2
  • 特征划分成wide和deep两部分,分别得到对应的wide embedding和deep embedding

主任务CVR task
image.png

  • #card 事实转化率 + 反事实转化率公式:r^i,j,r^i,j=σ(lf),σ(lcf)\left\langle\hat{r}_{i, j}, \hat{r}_{i, j}^*\right\rangle=\left\langle\sigma\left(l_f\right), \sigma\left(l_{c f}\right)\right\rangle

=<\sigma\left(l_fw+l_fd\right), \sigma\left(l_{c f}^w+l_{c f}^d\right)> \
=<\sigma\left(\phi\left(\vec{x}{i, j}^w ; \theta_f^w\right)+\psi\left(\vec{x}{i, j}^d ; \theta^d, \theta_f^d\right)\right), \sigma\left(\phi\left(\vec{x}{i, j}^w ; \theta{c f}^w\right)+\psi\left(\vec{x}{i, j}^d ; \theta^d, \theta{c f}^d\right)\right)>
\end{gathered}

+ 这里的 $\sigma(*)$ 是Sigmoid函数,$\phi(\vec{x}, \theta)$ 是线性回归函数,$\psi(\vec{x}, \theta)$ 则对应的MLP结构。具体的 $\theta$ 已经在图中标清楚了。除了根据wide embedding $\vec{x}_{i, j}^w$ 和deep embedding $\vec{x}_{i, j}^d$ 分别用线性和深度结构来处理,这其实就是一个双子塔结构。这个双子塔的输入是一样的,即 $\vec{x}_{i, j}^w+\vec{x}_{i, j}^d$ ,但是输出则是两个,分别对应事实CVR(factual CVR)$\hat{r}_{i, j}$ 和反事实CVR (counterfactual CVR)$\hat{r}_{i, j}^*$ 。 + 这样的双子结构其实可以很好地模拟用户做转化决策的过程。面对同样的输入特征 $x_{i, j}$ ,样本有一定的概率 $\hat{r}_{i, j}$ 进入事实空间,有一定概率 $\hat{r}_{i, j}^*$ 进入反事实样本空间。而我们模型中,加入了一个软性约束(先验知识) $\hat{r}_{i, j}+\hat{r}_{i, j}^* \approx 1$ 来控制这两个CVR的预测值。


ESM2

通过显式建模点击->转化之间的细粒度行为,进一步解决数据稀疏问题。这篇文章相比于ESMM其实没有特别多的改进,不过却是引出了微行为这一研究方向。示意图 #card

  • 加入心愿单归并为决定行为(Deterministic Action,DAction)

  • 将其余行为归并为其他行为(Other Action,OAction)

image.png

模型图 #card

  • 加入心愿单归并为决定行为(Deterministic Action,DAction)

  • 将其余行为归并为其他行为(Other Action,OAction)

image.png


Pairwise 训练

示意图 #card
image.png

[[Triplet hinge loss]] 公式 #card
image.png

[[Triplet logistic loss]] 公式 #card
image.png


双塔模型样本选择

正样本

  • 少部分物品占据大部分点击,导致正样本 大多是热门物品

    • 解决方案 :-> 过采样冷门物品,或降采样热门物品
      • 过采样(up-sampling) :-> 一个样本出现多次
      • 降采样(down-sampling) :-> 一些样本被抛弃
        为什么需要对负样本进行采样 ? #card
  • 未召回样本数量太多,需要进行采样。

  • item 特征包括:id 和 meta 特征

    • 维护全量样本的列表进行负采样内存成本高,无法接受

[[负样本]] 选择方法

  • 如何选择困难负样本 #card
    image.png

  • 简单负样本:batch 采样

    • in-batch 采样 #card

      • batch 内其他用户的正样本做为当前用户的负样本

      • 需要 batch_size 比较大

    • in-batch 采样 + bias 校正 #card

      • batch 内得到的负样本,可能热门物品被当成负样本的概率变大,造成对热门商品的惩罚过高

      • 通过引入频率修正

      • Xinyang Yi et al. Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations. In RecSys, 2019.

image.png

+ 混合采样

  + Mixed Negative Sampling for Learning Two-tower Neural Networks in Recommendations

  + Cross-Batch Negative Sampling for Training Two-Tower Recommenders

业务向 hard mining 方法

  • [[@Real-time Personalization using Embeddings for Search Ranking at Airbnb]]
    • 增加 “与正样本同城的房间” 作为负样本,增强了 正负样本在地域上的相似性;
    • 增加 “被房主拒绝” 作为负样本,增强了正负样本 在“匹配用户兴趣爱好”上的相似性
  • [[@Embedding-based Retrieval in Facebook Search]]
    • online#card

      • 在线一般是batch内其他用户的正例当作负例池随机采,

      • 本文提到选相似度打分最高的作为hard样本,

      • 同时强调了最多不能超过两个hard样本。

    • offline

      • 在线batch内池子太小了不一定能选出来很好的hard样本,离线则可以从全量候选里选。#card
        • 具体做法是对每个query的top-k结果利用hard selection strategy找到hard样本加入训练,然后重复整个过程。

        • 这里提到要从101-500中采,太靠前的也许根本不是hard负例,压根就是个正例。

        • 以及两个很好的经验,

          • 第一个是样本easy:hard=100:1,

          • 第二个是先训练easy再训练hard效果<先hard后easy

为什么曝光但是没有点击不能做为召回的负样本 #card
image.png

image.png


召回双塔和排序双塔的区别

相同点 #card

  • 训练时,都需要用户塔、物料塔隔离,解耦建模。不允许使用Target Attention这样的交叉结构,也不允许使用“用户与当前物料在标签上的重合度”之类的交叉特征。

  • 部署时,得益于双塔解耦的结构,面对一次用户请求,用户向量都只需要生成一遍。而物料向量都可以离线生成好,缓存起来,被不同的用户请求复用。

区别

  • 部署时物料向量存储方式 #card

    • 由于召回的候选集规模是百万、千万这个量级,拿用户向量与这么多物料向量逐一计算相似度是不现实的。所以召回双塔在离线生成众多的物料向量后,还要将这些向量喂入Faiss之类的向量数据库建立索引,以方便在线通过近似最近邻(ANN)搜索算法快速找到与用户向量相似的物料向量。

    • 由于候选集至多只到万量级,因此粗排双塔在离线生成物料向量后,无须喂入Faiss建立索引,直接存入内存缓存起来,Item ID当“键”​,物料向量当“值”​。在线预测时,粗排线性遍历召回返回的候选集,逐一从缓存中取出物料向量,与唯一的用户向量做点积就能得到粗排得分。如果某个新物料的向量离线时没有生成,在线预测时从缓存中取不到,就由“物料塔”实时在线生成,并插入缓存中。

  • 第二个不同点在于样本选择。以点击场景为例,对于正样本的选择没有什么争议,都是以“用户点击过的物料”当正样本。而对于负采样,两个双塔有着不同的选择策略。#card

    • 召回绝对不能(只)拿“曝光未点击”作为负样本,负样本的主力必须由“随机负采样”组成。

    • 粗排可以和精排一样,拿“曝光未点击”当负样本。当然,这里存在样本选择偏差(SSB):训练时用的都是曝光后的数据,经过了精排的精挑细选;而在线预测时,面对的只是召回后的结果,质量远不如曝光数据。

      • 尽管训练与预测存在着较大的数据偏差,但是拿“曝光未点击”作为负样本仍然“约定俗成”地成为业界的主流做法,效果也经受住了实际检验。

      • 而纠正这个样本选择偏差,也成为业界改进、提升粗排模型的一个重要技术方向

  • 第三个不同点在于“损失函数”的设计。#card
    image.png

image.png

  • 第四个不同点在于用户向量与物料向量的交互方式。#card
    • 由于召回的在线服务要调用ANN算法快速搜索近邻,受ANN算法所限,召回双塔中的用户向量和物料向量只能用点积来实现交叉(cosine也可以转化成点积形式)​。

    • 排双塔由于不需要调用ANN算法,自然不受其所限。在分别得到用户向量和物料向量之后,粗排依然可以拿这两个向量做点积来计算用户与物料的匹配度,而且这是主流做法。但是,粗排也可以将这两个向量喂入一个DNN的实现更复杂的交叉。当然,这个DNN要简单、轻量一些,以保证粗排能够实时处理较大规模的候选集。

image.png

  • 为什么这个模型不能用来做排序双塔 ?#card
    • 下面这块结构跟双塔模型是一样的,都是分别提取用户和物品的特征,得到两个特征向量。但是上层的结构就不一样了,这里直接把两个向量做conatenation,然后输入一个神经网络,神经网络可以有很多层,这种神经网络结构属于前期融合,在进入全连接层之前就把特征向量拼起来了。这种前期融合的神经网络结构跟前面讲的双塔模型有很大区别,双塔模型属于后期融合,两个塔在最终输出相似度的时候才融合起来。

    • 看一下图中的神经网络,这个神经网络最终输出一个实数作为预估分数,表示用户对物品的兴趣。再看一下这个部分,把两个特征向量拼起来输入神经网络。这种前期融合的模型不适用于召回。假如把这种模型用于召回,就必须把所有物品的特征都挨个输入模型,预估用户对所有物品的兴趣。假设一共有1亿个物品,每给用户做一次召回,就要把这个模型跑1亿次,这种计算量显然不可行。如果用这种模型,就没办法用近似最近零查找来加速计算。这种模型通常用于排序,从几千个候选物品中选出几百个,计算量不会太大。


粗排

前期融合和后期融合 #card

  • 前期融合:先对所有特征做 concatenation, 再输入神经网络。

    • 线上推理代价大:如果有 𝑛 篇候选笔记,整 个大模型要做 𝑛 次推理。
  • 后期融合:把用户、物品特征分别输入不同的神经 网络,不对用户、物品特征做融合。

    • 线上计算量小:

      • 用户塔只需要做一次线上推理,计算用户表征 𝐚。

      • 物品表征 𝐛 事先储存在向量数据库中,物品塔在线 上不做推理。

粗排模型和精排相比需要考虑的问题 #card

  • 1、模型需要兼顾计算性能和效果;

  • 2、打分样本空间分布与精排不一致(精排对粗排返回的样本做排序,粗排则要对召回的样本打分)

静态分排序


@大模型强化学习之GRPO算法原理浅析

链接: 大模型强化学习之GRPO算法原理浅析 - 知乎

GRPO 方法通俗案例 #card
image.png

  • 模型回答

image.png

  • 计算Advantage结果(一个组内开始计算)

    • advantage的计算公式如下:

      • A^i,t=rimean(r)std(r)\hat{A}_{i, t}=\frac{r_i-\operatorname{mean}(\mathbf{r})}{\operatorname{std}(\mathbf{r})}

image.png

通过标准化来计算奖励,优势函数的作用是某一个输出的token的数值相对于平均输出的优劣势,#card

  • 如果某一个输出的奖励高于平均的mean数值,则结果是正的,

  • 反之低于mean,结果是负的,

  • 这样策略模型会更倾向于生成那些具有较高奖励的输出

一个GRPO算法的的大致流程如下: #incremental #card

  • 用户输入query,模型推理生成一组回答

  • 根据reward function的定义(例如准确性、格式)为每个回答计算奖励得分

  • 在整个组内进行统一对比,计算它们的相对优势Advantage(上面的公式计算)

  • 更新策略,倾向于具有更高优势的回答

  • 模型更新的同时进行KL散度的正则,防止模型学习偏了

[[GRPO]] 公式原理解析

通过不同的规则得到 reward

  • xmlcount_reward_func 格式 #card
    • 输出是否是 xml 格式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 计算格式分
def count_xml(text) -> float:
count = 0.0
if text.count("<reasoning>\n") == 1:
count += 0.125
if text.count("\n</reasoning>\n") == 1:
count += 0.125
if text.count("\n<answer>\n") == 1:
count += 0.125
count -= len(text.split("\n</answer>\n")[-1]) * 0.001
if text.count("\n</answer>") == 1:
count += 0.125
count -= (len(text.split("\n</answer>")[-1]) - 1) * 0.001
return count

def xmlcount_reward_func(completions, **kwargs) -> list[float]:
contents = [completion[0]["content"] for completion in completions]
return [count_xml(c) for c in contents]
  • soft_format_reward_func #card
    • 包含特定的格式标签
1
2
3
4
5
def soft_format_reward_func(completions, **kwargs) -> list[float]:
pattern = r"<reasoning>.*?</reasoning>\s*<answer>.*?</answer>"
responses = [completion[0]["content"] for completion in completions]
matches = [re.fullmatch(pattern, r, re.DOTALL) for r in responses]
return [0.5 if match else 0.0 for match in matches]
  • strict_format_reward_func #card
    • 严格匹配?
1
2
3
4
5
6
7
8
9
10
11
12
13
def strict_format_reward_func(completions, **kwargs) -> list[float]:
pattern = r"<reasoning>\n.*?\n</reasoning>\n<answer>\n.*?\n</answer>"
responses = [completion[0]["content"] for completion in completions]
# 新增调试日志
matches = []
for idx, r in enumerate(responses):
print(f"\n--- Processing response {idx} ---")
print("Raw content:", repr(r)) # 使用 repr() 显示转义字符
match = re.fullmatch(pattern, r, re.DOTALL)
print("Match result:", bool(match))
matches.append(match)

return [0.5 if match else 0.0 for match in matches]
  • int_reward_func #card
    • 答案是否是 int 类型
1
2
3
4
def int_reward_func(completions, **kwargs) -> list[float]:
responses = [completion[0]['content'] for completion in completions]
extracted_responses = [extract_xml_answer(r) for r in responses]
return [0.5 if r.isdigit() else 0.0 for r in extracted_responses]
  • correctness_reward_func #card
    • 答案是否正确
1
2
3
4
5
6
7
def correctness_reward_func(prompts, completions, answer, **kwargs) -> list[float]:
responses = [completion[0]['content'] for completion in completions]
q = prompts[0][-1]['content']
extracted_responses = [extract_xml_answer(r) for r in responses]
print('-' * 20, f"Question:\n{q}", f"\nAnswer:\n{answer[0]}", f"\nResponse:\n{responses[0]}",
f"\nExtracted:\n{extracted_responses[0]}")
return [2.0 if r == a else 0.0 for r, a in zip(extracted_responses, answer)]

QWen

QWen

  • 输入长度:#card

    • 32k
  • 位置编码:#card

    • RoPE
  • Bias部分删除:#card

    • 对于大多数层,Qwen遵循陈卓辉等人的做法删除偏差,但对于注意力中的QKV层添加了偏差,以增强模型的外推能力
  • 激活函数:#card

    • SwiGLU
  • 优化器:#card

    • AdamW,设置超参数β1=0.9、β2=0.95和e=10^(−8)
  • [[Post Norm 和 Pre Norm 区别]] Pre-Norm:它已被证明比Post-Norm更能提高训练稳定性。

    • 这里可以看下苏建林提供的理解:#card
      • 本来残差的意思是给前面的层搞一条“绿色通道”,让梯度可以更直接地回传,但是在Post Norm中,这条“绿色通道”被严重削弱了,越靠近前面的通道反而权重越小,残差“名存实亡"。
  • RMSNorm:用RMSNorm取代了传统LayerNorm#card

    • RMSNorm为什么比LayerNorm好作者认为LayerNorm对张量所做的聚集中心化(re-centering)并不能够使梯度的方差减小,因此将均值μ=0。
  • 训练数据:#card

    • 2-3T token
  • 模型大小:#card

    • 开源了Qwen-1.8B、Qwen-7B、Qwen-14B 和 Qwen-72B

Qwen1.5 #card

  • 1)输入长度:32768

  • 2)GQA:32B和110B的模型使用

  • 3)模型大小:开源了六种大小的基础和聊天模型,即0.5B、1.8B、4B、7B、14B、32B、72B 和 110B,以及 MoE 模型(64个expert)

Qwen2.0 #card

  • 1)上下文长度:128k

  • 2)注意力机制:GQA,相比MHA参数减少

  • 3)模型大小:开源了0.5B、1.5B、7B、57B-A14B(共57B但激活14B)和72B等五种模型

Qwen2.5 #card

  • 1)模型大小:开源了0.5B、1.5B、3B、7B、14B、32B和72B等七种模型

  • 2)预训练数据:18T token

  • 3)输入输出长度:支持128K token,并能生成最多 8K token的内容

Qwen2.5-MAX #card

  • 1)模型大小:未知

  • 2)模型结构:大规模 MoE 模型

  • 3)训练数据:在20T+ token 上进行了预训练,并使用SFT和RLHF方法进行了后训练

QwQ-32B #card

  • 1)模型大小:32B

  • 2)训练方法:借鉴的DeepSeek-R1,直接进行两次大规模强化学习(RL):

    • 第一次RL:针对"数学和编程任务",采用基于规则的奖励模型,进行RL训练。随着参数迭代,模型在两个领域中的性能均表现出持续的提升。

    • 第二次RL:使用通用奖励模型和一些基于规则的验证器进行训练。通过少量步骤的通用 RL,可以提升其他通用能力,同时在"数学和编程任务"上的性能没有显著下降。

  • 3)技术细节:未知(可能报告还没发出来)


Query改写召回

主要解决什么问题?#card

  • 通过修改用户原始查询的关键词或结构,生成多个语义相似的变体(如同义词、纠错词、扩展词等),扩大召回范围。

  • 典型场景:解决用户表达模糊、词义多样导致的召回不足问题。

这种流程与在doc侧加tag有什么优劣?#card


吾辈心中亦有惑


欢迎光临算法花园,我是 Runye,本站是我的博客 or 数字花园 or 知识库 or 训练日志。

如果有好的建议或想法,期待通过各种方式和我交流。


[[NOW]]

ChangeLog

关注领域


@I started journaling about why I procrastinate and holy crap, my productivity skyrocketed

链接:我开始记录自己为什么拖延,并且天啊,我的 productivity 突飞猛进 : r/productivity — I started journaling about why I procrastinate and holy crap, my productivity skyrocketed : r/productivity

I began keeping a “procrastination journal” (sounds stupid, I know, but hear me out). Every time I caught myself procrastinating, I’d quickly jot down: #card

  • What I was supposed to be doing 我本应该在做的事情

  • What I was doing instead (usually scrolling Reddit or watching yt shorts) 我当时在做什么(通常是刷 Reddit 或看 YouTube 短视频)

  • How I was feeling in that moment 我当时的感觉

And then I would read it at the end of the day. At first, it felt pointless. But after a few weeks, I started noticing patterns.#card

  • Turns out, I wasn’t just being “lazy” - I was avoiding specific types of tasks when I felt overwhelmed or unsure where to start. 不知道如何开始

  • I am a software dev who also do the product management at my company. And I hate doing “research” on features. 讨厌功能研究

The weird thing is, just being aware of these patterns made them easier to deal with.#card 奇怪的是,仅仅意识到这些模式就让它们更容易处理。

  • When I know that if i had to do research, greater changes i won’t be productive today. 当我知道如果必须进行研究时,今天就不会有太大成效。

  • And now Instead of beating myself up, I started break down the scary tasks into smaller chunks. 现在,我不再自责,而是开始将那些令人生畏的任务分解成更小的部分。


图1-1:DeepSeek-R1生成的完整流程

image.png
occlusion:: eyIuLi9hc3NldHMvaW1hZ2VfMTc0MzI1ODU1MzY2N18wLnBuZyI6eyJjb25maWciOnt9LCJlbGVtZW50cyI6W3sibGVmdCI6ODUzLjM4NDgxNDg0MDkyMSwidG9wIjo4Ni42ODQ4NjM4NjA1OTUxLCJ3aWR0aCI6ODUyLjA3NDA4NzI2OTgyOTYsImhlaWdodCI6MTE4LjM2NTcyODE1MzY4NTYxLCJhbmdsZSI6MCwiY0lkIjoxfSx7ImxlZnQiOjE0NTcuNTYzNTUwMjAxNzkyLCJ0b3AiOjMzNS4yOTkxODEwOTk5MDczNCwid2lkdGgiOjM2Ni4wOCwiaGVpZ2h0IjoxMzQuMTU2MTY2OTgxMTY3MywiYW5nbGUiOjAsImNJZCI6Mn0seyJsZWZ0IjoxMjA1LjE4OTI3MjQyODkwODcsInRvcCI6NDY1LjQ4MjgzOTU1NzM3NzgsIndpZHRoIjo4MzQuODYxNDU2NzgxMzcyNiwiaGVpZ2h0Ijo2Ny4wMDM4MjU3MjY5Njc3NiwiYW5nbGUiOjAsImNJZCI6M30seyJsZWZ0Ijo2NzMuMzUwNzE0MDk2MDY5OSwidG9wIjo2MjcuMzc1NzA1NDU3MTg2Nywid2lkdGgiOjMxMi40OTY2NzI5MDY5NTkyNSwiaGVpZ2h0Ijo4My4wMDk5NDc2NzU1NTAxNywiYW5nbGUiOjAsImNJZCI6NH0seyJsZWZ0IjoxMjQzLjQ2NjE2NjgwNTQyOSwidG9wIjo2NjkuNTY4OTAwNTY3NzEwMiwid2lkdGgiOjQyNS4xMDU1ODgwODI5MzQ0NSwiaGVpZ2h0IjoxNDUuMjAwNDM1NTQxOTYxODQsImFuZ2xlIjowLCJjSWQiOjV9LHsibGVmdCI6MjczLjAzODM4MTMwNDgwNjIsInRvcCI6Nzk1Ljk0MDY5MzM3NzY2MDUsIndpZHRoIjo0NzMuMzczMzQ0OTk0MzIzNjUsImhlaWdodCI6MTg1LjYxMDYwNjA5Njk3OTM4LCJhbmdsZSI6MCwiY0lkIjo2fSx7ImxlZnQiOjExODYuNDI4NzU5NTg5ODY3MiwidG9wIjo4OTguNjM5NjU2NzA2NTg3LCJ3aWR0aCI6NzMyLjQzNzYwODg4MjM4ODIsImhlaWdodCI6MTgwLjA5MDI0MDQ2NzQ3OTcsImFuZ2xlIjowLCJjSWQiOjd9LHsibGVmdCI6NzAyLjcyNjA0ODUxMzU0MjUsInRvcCI6MTIyMi40MjYwOTU5NjY1NjM3LCJ3aWR0aCI6MjgwLjQwMjE3MDQ2NzY0NTMsImhlaWdodCI6OTguODM3MTE4MTk0NTI2MjgsImFuZ2xlIjowLCJjSWQiOjh9LHsibGVmdCI6MTMzOS42ODAwNTk1NTU3NDEsInRvcCI6MTMwOS42OTkyMzAxMzg4MzczLCJ3aWR0aCI6NTEyLjU2NzU0OTczNjQ0NDMsImhlaWdodCI6MjU3LjQyMDExODIzMDU2NzYsImFuZ2xlIjowLCJjSWQiOjl9XX19
1)获取DeepSeek-R1-Zero:#card

  • 通过"纯"强化学习(无任何监督数据)去生成一个新模型,即R1-Zero,然后用它生产几千+带CoT的冷启动数据,作为后续R1模型的燃料之一。

2)获取DeepSeek-R1:主要包括四个核心训练阶段(阶段1、2、3、4)和2个数据准备阶段(阶段0、2.5):

  • 阶段0 :-> 即获取DeepSeek-R1-Zero。
  • 阶段1 :-> 基于R1-Zero的几千+数据,在V3-Base上执行第一次SFT,获得基本的格式遵循和反思验证的能力。
  • 阶段2 :-> 然后执行第一次强化学习,加强模型在数学、代码、科学、逻辑推理等领域的推理能力。
  • 阶段2.5 :-> 基于阶段2的模型,获取领域更广泛的600K数据;基于V3-Base,获取包括CoT的非推理数据200K。
  • 阶段3 :-> 基于阶段2.5获取的800K数据,在V3-Base上执行第二次SFT,增强模型的通用性。
  • 阶段4 :-> 执行第二次强化学习,进一步对齐人类偏好,提升模型的可用性和无害性,并精炼推理能力。
    获取R1-Distill-X的流程,#card
  • X是指任何"其他模型",比如qwen。在800K数据的微调后,将大幅提升原模型的效果。

logseq-github-publisher

logseq 部分

  • DONE 遍历全部需要发布的文章

  • 导出文档 meta data

    • DONE 属性中字符串引号重复

    • DONE 文章属性如果重复会报错,toc

  • 文章格式转化

    • DONE Nunjucks Error expected variable end

      • 需要处理被双括号包围起来的内容

      • zotero-linked-file 也要处理

    • CANCELED 将 id 设置成文档的属性(持久化)

      • 等后面 db 版本持久化
    • DONE 文件名中去除斜杠

    • DONE wiki link 变成 http link

      • 原始代码借助模板和 hugo 的功能,实现通过文章去查文章的链接

        • 因为编译原因,关闭模板,这一条路走不同。
      • 一篇文档对应的链接有两种形式?

        • 直接指定 permalink

        • 根据文档名称生成,将 / 提升成 _

      • 解决 alias link

      • DONE [[2025/04/14]] 没有指定 permalink 的需要改写成绝对链接

      • DONE [[2025/04/14]] 导出的链接包含中括号

      • DONE [[2025/04/14]] 内部链接需要 url 编码(解决文档名称中的空格等特殊符号

    • block embedding 用文本替代,链接到对应的 文章的 http link

    • 不同级别标题

    • TODO task 符号改写

    • TODO [[logseq-anki-sync]] 部分符号改写

    • TODO 导出 Link Reference

  • DONE 提取图片

    • DONE 无法上传图片

      • 通义灵码写的代码帮忙解决问题
    • DONE 图片位置

      • hexo 图片需要放到 source/xxx 路径下,文章需要放到 source/_post/xxx 路径下

      • 实现时可以把图片上传到图床,然后修改文章,或者支持把图片和文章上传到不同的路径

    • DONE 不重复上传图片

    • TODO 图片上传失败

  • DONE 生成站点之后,点击首页的文章链接变成下载

    • http://localhost:4000/#:~:text=148%E4%B8%AA%E5%AD%97)-,%E4%BD%95%E5%88%87300/034,-image.png
  • 插件配置

github 部分

  • DONE push 到 github

    • put 接口

      • 文件需要 base64 编码

      • 如果文件已经有了需要提供 sha,如果是新文件不用提供

  • TODO 发布进度

导出优化

  • 可读性差的文档

  • TODO 导出进度提示

  • TODO 增量更新最近有修改的文章

  • TODO 文件名称改变后,旧文件不会被删除。

    • 需要后面 db 版本利用page id 解决,md 版本的 page id 没有持久化
  • DONE 文件上传前对比 sha 值,出现不一样时再修改。

插件发布相关

  • TODO 写 readme

  • TODO 写赞助信息

  • TODO github action 自动编译插件

  • TODO 提交到 logseq 官方仓库

hexo 编译问题

  • TODO TypeError: Invalid URL

  • 修复离线编译遇到的问题

    • 仓库之前是用 git lfs 管理图片,远程添加图片后,再拉取到本地,还是会被处理成 lfs 处理。

    • DONE metadata 中属性缺失

      • 解析 meta 非数组时,直接 copy 了数组这部分代码导致出错。。。

      • 发现脚本出错,不知道怎么中途中止,好像现在只能等他运行完。。。

    • Nunjucks Error: _posts/logseq/2024 读论文目录.md [Line 1, Column 24] parseSignature: expected comma after expression

      • 文章中默认 {{ }} 或 {% %} 是 nunjucks 标签,logseq 直接导出的文章没有对 query 等处理,会报错。

      • 根据 Front-matter | Hexo 可以给文章设置属性:disableNunjucks: false

    • 如果文章属性有 permalink: xxx,生成之后链接无法点击,需要手动修改成 permalink: xxx.html

开发环境问题

  • 问题 ERROR: This version of pnpm requires at least Node.js v18.12
    The current version of Node.js is v16.19.0
    Visit https://r.pnpm.io/comp to see the list of past pnpm versions with respective Node.js version support.

    • [[nvm]] install 18.12

    • nvm use 18.12

参考资料

  • [[Logseq Plugins 开发实战]]

  • [[logseq-schrodinger]]

  • [[logseq-anki-sync]]

  • [[obsidian-enveloppe]]


Lesson 3B - Management Process

Lesson Goals

  • You will have some clear models of project management to use as they are or build upon

[[X - Weekly Process]]

  • 创建对应的笔记 WP:FEB11 - 18 #card
    • Overdue Tasks to Schedule

    • Weekly Goals

    • Daily Tasks

image.png

+ Weekly Summary

+ Weekly accomplishments
  • 创建 week open 模板 #card
    image.png

  • 浏览过期的任务

  • 列出 weekly goals #card

    • 移动 goals 到 Daily tasks 下对应的截止日期

image.png

  • week close 模板 #card
    image.png

[[X - Daily Process]]

[[X - Task Management]]

  • 想要做的事情 inbox 标签 vs todo

  • 不需要立即做的可以移动到特殊的笔记中,等一周结束后再评估。

  • 简单处理逻辑 #card
    image.png


Query 改写

步骤:候选召回、改写判别

候选召回

  • 基于同义词

    • 直接通过同义词表映射对query进行改写
  • 基于行为统计

    • 核心思路 :-> 基于用户点击行为等统计信息找相似query,共同点击同一个item的query可能为意图一致的query。

    • 具体实现

      • 推荐i2i召回算法,如协同过滤方式:#card

        • 先构建query到doc的点击矩阵,得到query稀疏表示,

        • 进而通过表示距离计算得到源query的相似query;

      • swing算法 #card

        • 将query id看作user id,计算相应点击商品的swing,得到类似i2i的q2i。

        • 该类方法适用对点击行为丰富的头部query进行改写。

  • 基于内容

    • 对query进行内容理解,如word2vec、向量召回,找相似query。

    • 基于语义匹配的query改写 #card

      • 通过构建<query, query>的相似pair对作为训练数据,训练深度语义匹配模型(一般为双塔结构,方便向量方式召回候选),

      • 而相似pair对的构建可以基于上述行为统计的方法,也可直接训练query-item的语义匹配,间接也可得到query2query的语义度量模型。

    • 基于生成的query改写:#card

      • 通过seq2seq的模型架构,直接进行query2query的生成,训练数据仍可来源于行为统计的query pair对;

      • 另一种思路可以借鉴Skip-Thought Vectors,

        • 将一个session内的query作为一个序列(q_1, q_2, …, q_n),可以采样得到一条训练样本(q_i-1, q_i, q_i+1),在seq2seq架构下,通过encoder对q_i进行编码,decoder解码出q_i-1和q_i+1。

        • 这样得到的encoder输出的context向量即可作为query的表示向量,并可用于相似query召回。

    • 上述方法中,构造query pair对样本以及匹配/生成的方法还有很多,如引入比较流行的预训练+微调的方法。

    • 这类基于内容的query改写策略,可以将对头部query语义的理解泛化到用户行为不足的 长尾query ,提升长尾query的改写效果。

  • 基于session #card

    • 同session内作为一个序列,参考word2vec,训练query向量度量query相似度;或者根据用户session内换更换query的统计特征进行query改写候选召回。

      • 1是用户同一个session内query往往意图相似;

        • 可简单通过频率统计的方法
      • 2是将用户session内所有行为看作一个doc,query看作doc中的词,类似地,相同上下文的query很可能具有相同的语义。

        • 可参考word2vec或上文所述的生成模型方法

改写判别

  • 一般基于人工标注的训练数据,进行特征工程训练 二分类判别 模型,如GBDT或DNN模型等。
  • 这里以GBDT特征融合方法来介绍改写判别的一般方式,具体地,先经过特征工程得到源query和候选改写query的统计和语义相似度特征,再基于标注数据对特征进行融合,改写候选进行置信判别。除了改写召回阶段的中间特征可以直接利用外,还可进一步构造出更多的统计或匹配特征,如:#card
    • term重合率、实体term重合率、去停用词或引入term weighting的term重合率

    • 各种字面匹配距离,如编辑距离特征:

    • 基于频率或tf-idf的词袋模型表示的向量cosine距离。

    • word2vec表示距离、bert语义向量表示距离。

    • 点击doc集合的重合度、点击类目集合的分布差异距离(如Jaccard相似度,KL散度)。

    • 核心必要属性是否共同包含。

    • query pair对的基础特征,如term数、核心属性数等。

除了上述常规的query改写,还可以将query直接映射到意图ID,如类目ID、商品CPV ID等。该类改写常应用于类目、属性(年龄、尺码、型号等)等维度的搜索。#card

  • 如query"裙子"可以映射到“连衣裙”类目ID、“女式手表”改写为“CPV:3214221 AND 手表”,其中3214221为属性性别-女的ID。

  • 直接将query映射到意图ID一种常用的方式是使用规则映射,而映射规则一般来源于数据挖掘得到的词或短语到ID的映射。

Ref


Query term weighting

如query “家用的跑步机”,例子 #card

  • “跑步机”为品类词,权重最高、

  • “家用”为属性词,权重次之、

  • “的”为助词权重最低。

例: 冬季卫⾐推荐:冬季 / 卫⾐ / 推荐 #card
image.png

image.png

静态term重要性

  • 静态term重要性计算,顾名思义,term权重不随上下文变化而变化,其依赖特征多为term粒度的离线统计特征。#card

    • 比较经典的有搜索term词在语料库中的IDF(Inverse Document Frequency)、term词在搜索日志中的搜索频率、term词典规则(是否为停用词、专名词等)等。

    • 得到静态term重要性后,对query中多term的权重归一化,即可得到相应query term weighting结果。

  • 静态term重要性计算优缺点 #card

    • 特点是简单,无需复杂算法,

    • 缺点也很明显:准确率低、对上下文信息考虑不充分、长尾term效果差等。

动态term重要性

  • 主要思想是从 query整体 考虑各term重要性,主要方法则是通过特征工程得到可能对term重要性预测相关的特征,然后通过机器学习方法对term权重进行拟合,相应地可分为传统方法和深度学习方法两种。

  • 传统方法

    • 传统机器学习term重要性计算的核心在于特征工程,而经典的特征主要有统计特征、tagging特征、文本语义特征等:
      统计特征:主要包括基础统计特征和行为统计特征。query的基础统计特征包括 query长度、term长度、term在query中的位置,以及上述的term IDF值、term粒度的互信息、左右邻熵等。而行为统计特征则多依赖搜索点击日志,如:
      query中各term在query点击的doc集合中出现的频次。
      点击的doc集合中term出现频次/点击doc数。
      单term搜索次数、term在query中被搜索次数、出现当前term的query平均长度。

      tagging特征:该部分特征主要基于query tagging识别出各term类型,如电商领域中重要的tagging类型:品牌、品类、型号、尺码等,又如基础词性、句法成分等tagging信息。不同类型的term权重往往有较大差异,同样是term重要性计算的强特征。
      文本语义特征:该部分特征主要为文本和语义维度的特征,如文本层面term是否为英文、数字等,语义层面删除当前term后,源query多大程度可以保留原语义。具体的有:
      去掉各term后query的语言模型概率/query语言模型概率。
      利用深度语义相似度模型,去掉各term后的新query的模型输出和原query的模型输出相似性偏离程度。

      得到query中各term的特征后,可通过常用的机器学习模型(LR/GBDT/NN)对目标权重进行拟合。而支持模型训练的训练数据一方面可以直接来源于人工标注数据(如常见地将term权重分成若干档位),另一方面也可以通过搜索行为数据进行自动term权重打标,并通过人工审核得到最终训练数据。
      对于自动打标,可以利用上述特征工程中高准确率的统计特征(如term在命中doc中的频率占比),并根据特征值分布进行分档,对应到标注标准。而对于长尾query或term等低置信样本,则通过人工校验,得到相对准确的训练样本,避免模型对单一特征过分关注。
  • 深度学习方法

    • 在训练数据充足的情况下,也可通过深度学习直接预测term权重,在深度学习框架下,query term weighting问题对应序列标注任务,因而常用的序列标注深度模型都可以用来尝试解决term权重计算问题,如经典的LSTM、LSTM+CRF、BERT等。具体地,序列标注模型输入为term序列,对应位置的输出层接分类或回归任务进行term重要性目标拟合。

Ref


Query 类目预测

基于统计

  • 用户搜索query后点击/购买商品的类目分布,可以反映出该query的类目预测分布。#card

    • 基于此,可以使用频率统计的方法(如query点击/成交频次或成交率)得到query的类目的分布,并通过拍阈值、规则过滤等方式,筛选出相对准确的query类目预测结果。
  • 除了利用点击行为,还可以进一步引入时间衰减因子和session信息:#card

    • 给近时间的行为更高的权重;短session内更换query,给最后的query点击行为更高的权重。
  • 而对于行为较少的长尾query,则可以通过其他辅助行为信息进行补充,如同session的query挖掘:#card

    • 同一个session的query往往具有相同的意图,其类目预测结果也往往一致。

    • 如果session中有头部query,则头部query的类目预测结果可以拓展到session中的长尾query。

基于内容

  • 无监督方式#card

    • 可以通过贝叶斯统计、互信息、LDA等方式从商品内容中聚合得到类目关键词及其权重,对query term按各类目下的关键词进行加权求和,得到高置信的类目预测结果。
  • 有监督方式则#card

    • 基于人工标注数据或基于点击行为的弱监督数据,通过文本分类的方法训练类目预测模型。
  • 同样对于长尾的query,基于内容的方法可#card

    • 以通过丢词、关键词匹配、编辑距离、word2vec距离等方式映射到头部query,得到其类目预测结果。

    • 此外基于头部query训练的分类模型,往往也可以有足够的泛化能力适应长尾query。

基于特征融合

  • 基于统计和内容的方式可以产出很多帮助query类目预测的统计特征或文本特征,而基于众多的特征再训练一个分类器(如LR/GBDT/DNN等)进行特征融合,往往可以更加准确的预测query类目。 #card

    • 这种特征融合的模型可作为一个判别器,进一步判断基于统计和内容方法得到的类目候选是否准确。
  • 常见的特征如: #card

    • Query点击、加购、成交等行为商品类目统计频次/概率、Query下所有类目的归一化分布、比例等。

    • Query召回类目下的商品数、占Query的商品数比例、占类目下的总商品比例。

    • 类目所属的一级类目、领域等。

    • Query成交价格和商品类目成交价格匹配程度。

    • 子模型分数,如基于文本内容的类目预测模型的预测分数。

    • Query词命中类目关键词分布加权分数


相关性

相关性计算可以看作是query和item的匹配分计算

结构化信息匹配

  • 电商搜索往往有比较完备的类目、属性体系,细致准确的类目和属性匹配(结构化信息匹配)可以简单有效提升query和item的相关性。#card

    • 而结构化信息匹配依赖于query和item的结构化信息提取,如识别出query和item的类目和属性pv(如:property: 性别, value:女)。

      • query侧,类目预测一般使用统计或分类的方法来完成,属性pv的预测则可看作是序列标注任务。

      • 对于item侧的结构化信息提取,除了使用和query理解类似的算法方法解决,更多的则是依靠商家或运营的维护。

  • 在得到query和item的结构化信息后,在线可以进行结构化信息的匹配,并得到相应的相关性匹配分。#card

    • 由于计算复杂度低,结构化信息的匹配特征往往被用在召回或海选阶段进行相关性过滤,作为最基本的相关性保障。

文本匹配特征

  • query和item

    • term匹配数、

    • query term的匹配率 = matched_term_num/query_term_num

    • item term匹配率 = matched_term_num/item_term=-num

    • 带weighting的query term匹配率和item term匹配率

  • 考虑了term权重和文档长度的BM25、考虑了term共现信息的紧密度和点互信息(PMI)特征、考虑用户行为的文本语义拓展

  • 可以通过用户行为来拓展文本匹配特征,如:对于<query, item>点击pair对,通过协同过滤等方式,可以得到query2query的列表。聚合key query的所有相似query,并对query进行分词,对所有的term进行加权求和(权重可以为频次或q2q分数),归一化后得到query的表示: #card
    image.png

语义匹配特征

  • 解决问题 #card

    • 基于文本的匹配特征虽然简单,但需要严格的term匹配,而对于同一个语义的多种表述,即使引入同义词信息有时也无法很好的解决。
  • 隐语义匹配

    • 隐语义匹配的核心思想是将文本表示成隐语义向量,并通过向量距离来度量文本之间的相似度。#card
      • 与上述基于词袋模型的稀疏向量表示不同,隐语义向量是对文本主题或语义的隐式稠密表示。

      • 经典的隐语义表示算法包括基于奇异值分解的潜在语义分析算法(LSA)、主题模型PLAS、LDA等。

      • 而在Word2vec算法流行开来之后,基于词向量的隐语义文本表示(如:词向量的avg/max pooling作为文本向量、Doc2vec等)也取得了比较好的效果。

  • 深度语义匹配

    • 深度语义匹配通过神经网络方法进行文本的隐语义表示匹配,进一步又可分为表示型语义匹配和交互型语义匹配

      • #card 表示型语义匹配方法将query和item内容通过encoder网络分别表示成隐语义向量,并通过向量距离度量二者之间相似度。

        • 表示行语义匹配网络多种多样,在训练方式上,可以使用pointwise方式或pairwise 方式,相应的在loss选择上一般有关注判别的MSE和CrossEntropy或者关注排序的TripleLoss等。

        • 在网络结构上,主要在于encoder网络的不同如经典的DSSM、CNN、RNN以及近几点的BERT网络等。

      • 交互型语义匹配则通过query和item的early fusion(query-item特征交互融合)来实现细粒度语义的匹配,提升匹配准确率。#card

        • 经典的方法有ARC-II、MatchPyramid、ESIM、BERT等。
      • 不同方法对比 #card

        • 表示型语义匹配方法的优势在于离线和在线的分离,复杂模块离线计算,线上只需算向量距离,但相对交互型方法缺少细粒度语义信息的建模,准确率相对低;

        • 同样,交互型方法虽然匹配准确率相对高,但也伴随着线上开销大的不足,尤其复杂的BERT模型。

    • 而为了兼顾效率和准确率,也有很多折衷的方法,如:PolyEncoder、DeFormer等后融合(later fusion)方法,另一种常用策略则是模型蒸馏,如对BERT模型瘦身的DistillBert、TinyBert等。#card
      image.png

  • 多模态语义匹配

    • 多模态的语义匹配框架和基于文本的深度语义匹配基本一致,不同点在于对多模态信息的编码方式,以图文匹配为例:#card

      • 在表示型匹配架构下,通过经典的图像特征提取网络(如ResNet、Inception等)将图像提取为向量,再通过预训练或端到端的方式同文本Encoder模块表示一起进行语义匹配任务的训练。
    • 在交互型匹配方式下,常用方法是将图像信息转换为向量序列,进而像处理文本匹配一样进行图文的语义匹配。#card

      • 如经典的方案SCAN、VSRN等方法,通过Faster-Rnn等目标检测模型将图像提取为固定数量的region,region的特征向量序列作为图像的Embedding表示,进而作为多模态匹配网络的输入。
    • 基于此,近两年多模态BERT的方法也同样有不错的效果(如VL-BERT、LXMERT、UNITER等)。#card

  • 特征融合

    • 在上述相关性特征基础之上,对众多特征进行融合往往可以进一步提升相关性指标,融合模型则采用经典的LR/GBDT/NN模型即可。

    • 此外特征融合模型的训练一般使用人工标注的训练数据,同时为了标注方便可将相关性目标分为不同档位。#card

      • 如四档模式下,在训练阶段,四个档位可映射到1、0.75、0.25和0四个分位,模型则通过回归或分类的方式对分位进行拟合。

      • 由于该部分策略是对子特征的Ensemble,因此并不需要非常多训练数据,万级别基本可以满足需求。

其他

  • 相关性优化任务方法

    • 接到一个搜索场景的相关性优化任务后,首先要做的往往不是训练前沿的深度模型,而是进行系统现状分析,包括:技术现状分析和问题现状分析。#card
      • 前者需要确定现有系统在相关性上已经有了哪些策略,相应策略的准确性和影响面有多大;

      • 后者则需要通过badcase占比分析来定位头部问题,并进行优先解决。

      • 如在项目启动阶段,如果发现大部分的问题case为明显的基础相关性不足和类目不匹配,应优先建立和优化基础的匹配策略。

      • 通过简单高效的方式建立强baseline,同时保证阶段性效果提升,为后续优化奠定基础。而上述过程也往往是在效果优化的过程中不断循环往复的。

image.png

  • 训练数据

    • 数据往往决定模型的上限,相比于模型结构的选择和设计,深度匹配模型往往更加依赖大量的训练数据。而在缺少人工标注数据的积累的情况下,训练样本的构造也就变得十分重要。相应的训练数据的构造主要会面临两个问题:#card

      • 高置信样本挖掘,避免搜索点击行为日志“点击但不相关”的问题。

      • 定制化的负样本构造,避免模型收敛过快,只能判断简单语义相关性,对难样本无法很好的区分。

    • 针对以上问题,常用的方法也很多,如:#card

      • 正样本:充足曝光下高点击ctr样本(如:ctr大于同query下商品点击率平均值)

      • 负样本:

        • 同父类目的邻居子类目负采样。
          高曝光低点击类目样本:同一个query搜索下,根据全局点击商品的类目分布,取相对超低频类目样本作为负样本。
          充足曝光情况下,低于相应query平均曝光点击率一定百分比的样本做负样本。
          基于query核心term替换构造负样本:如,对于“品牌A+品类”结构的Query,使用“品牌B+品类”结构的query做其负样本。
          随机构造负样本:为增加随机性,该部分实现可在训练时使用同batch中其他样本做负样本,同时也可以引入经典的Hard Sample机制。
  • 多因子融合

    • 搜索算法最终的item排序往往是考虑多因子,而在电商搜索中比较重要的因子除了相关性因子,还有和业务直接相关的成交效率因子以及其他业务规则。

    • 简化来说,对于相关性和成交效率因子,而二者的融合方式大致有三种:

      • 相关性分数做档位分,下游根据相关性分层排序。#card

        • 分档的方式可以做到分层排序,进而多因子解耦,调试方便高效;
      • 相关性连续值score和效率score加权得到最终排序分。#card

        • 相关性和效率分加权方法相对于分层排序,则可以更加综合地考虑相关性因子和效率因子,但确定合理的权重往往耗时耗力。
      • 相关性和效率目标联合多目标优化。#card

        • 多目标联合优化的方式在点击-成交模型中融入相关性因子,由数据和模型决定最终的商品排序,不需要人工干预,但可解释性差,且对相关性进行干预相对不够灵活。

相关性定义 #card
image.png


3. 具体的 -- 架构之预估与机制

3.1 模型预估

  • ① 在模型预估发展历史上两者算法的演变轨迹几乎一致:#card
    • A. 随着业界技术的发展,从线性模型到深度模型,模型泛化能力和特征学习能力逐步加强特征由低阶到高阶,特征表达能力越来越强

    • B. Embeddings/Attention/Transformer/BERT等各种用户行为序列建模(可参考: 九河之间:2022年CIKM用户序列预估梳理)

② 两者的技术路线、模型架构极为相似;不同是——优化目标或预估目标不尽相同#card

  • A. 推荐:CTR/时长等用户体验目标为主(电商 CTR/复购/GMV等);视频类更多倾向于预测观看时长,新闻类预测CTR,电商类预估客单价等等。

  • B. 广告:CTR/CVR/GMV/ROI 等用户体验、商家转化、平台收益的平衡。由于后续需要结合计算精确的出价,因此要求CTR/CVR足够精准(催生了校准算法),而不仅仅是相对的序。而推荐算法更多照顾一个列表整体上,甚至为了增加用户的长期参与度,还对推荐内容的多样性,新鲜度有更高的要求,这就让探索与利用,强化学习等一些列方法在推荐场景下更受重视

③ 优化目标或预估目标不尽相同,举例说明#card

  • A. MMoE + ESMM + Bias-Net 的架构,在广告中 有三个预估目标 – Pctr点击、Pctcvr 转化、GMV收益

  • B. 同样的结构,在推荐场景可能有的目标:Pctr点击(感性认知)、Preadtime阅读时长(理性认知)

3.2 机制策略

  • ① RankScore 设计

    • A. 广告(点击付费类):rankscore = k1 * CPC(平台利益) + k2 * GMV(商家利益) + k3 * UEQ(用户利益) 。 #card

      • 对于广告算法来说,由于要协调广告主、用户和广告平台之间的利益,就会产生很多博弈。

      • 广告系统是根据 广告出价 X 点击率排序,涉及计费 (CPC计费)

    • B. 推荐:rankscore = k1 * CTR + k2 * ReadTime + k3 (新闻资讯); 推荐:rankscore = k1 * CTR + k2 * RPM + k3 (电商)。 #card

      • 推荐系统没有出价,点击率(感性喜好程度)权重较大,同时,兼顾阅读时长(理性喜好程度);

      • 尽量去用各种机器学习筛选出与用户特征值匹配度更高的内容。

    • C. 自然可以直接预估gmv,广告需要平衡gmv、cpm和用户体验。 #card

      • 预估指标为ctr、cvr、price、用户体验分sum(poi_ord_total_amt) / count(distinct expose_uv) * 1000 as rpm 千次用户成单金额;没有抽佣的哦!
  • ② 广告的 机制 更加复杂,GSP 二阶计价、MinBid、MinCPM 等时间关系不罗列了。

  • ③ 广告系统中,CTR等算法只是其中关键的一步,估的准CTR只是一个前提,#card

    • 如何让广告系统盈利,产生更多收入,还需要pacing,bidding,budget control,ads allocation等多个同样重要的模块协同作用,才能让平台利益最大化,这显然是比推荐系统复杂的。

    • 而推荐系统中,由于需要更多照顾用户的长期兴趣,需要一些补充策略做出一些看似“非最优”的选择,比如探索性的尝试一些长尾内容,在生成整个推荐列表时要加入多样性的约束,等等。这一点上,广告系统也需要,但远没有推荐系统的重视程度高。

3.3 广告机制特色

  • 广告一些术语:

  • ① 每个广告 (Ad) 有一个出价 (Bid) , 并有其在某情形下实际的点击率 (Click-Through-Rate, CTR)。

  • ② 广告按点击收费 (Charge per Click, CPC), 策略有 #card

    • 一价计费 (First-Price, FP, 即广告出价多少则一次点击计费多少)

    • 二价计费 (Second-Price, SP, 即广告按下一位出价来支付点击价格, 更普遍的是 GSP,Google,Yahoo, LinkedIn都是用这一种)

  • **千次展现收费 (Cost Per Mille, CPM, 或 RPM, R for Revenue), ** 即对点击付费广告其展示一千次情况下的收入 (一价计费下等价于 1000CTRBid), 或是展示广告的千次展现固定价格。

  • ④ 预估点击率 (predict CTR, pCTR) 是指对某个广告将要在某个情形下展现前, 系统预估其可能的点击概率。

3.3.1 Facebook广告系统背后的Pacing算法

  • Pacing是Facebook广告系统中调节 花费预算节奏 的一个算法,一个类比就是竞跑的运动员:过早冲刺意味着在终点前就没劲了,但过晚冲刺也许你就没完成这次比赛。
    • Pacing保证对所有的广告主在竞争前提下自动分配不同的广告预算(有点像时间切片预算)。Pacing就是优化核心组件让广告主获得 :-> 最大的投资回报率(ROI)。
    • Pacing会结合当前广告的 预算及出价 ,为广告找到最佳的预算使用速率同时兼顾广告目标的完成。(点击、转化、应用安装等)
  • 简单的公式 最终竞价 (每次展示) = 优化竞价 (每次展示)* CTR where 优化竞价 <= max_bid
    • 从上面例子中,当我们在整段时间内使用稳定的出价(Pacing),广告主的价值相比没有Pacing或者出价过高过低,得到了 最大化
      • 为了实现目标,Pacing期望通过 学习其他的有同样目标用户的竞争广告 ,提出一个优化的竞价。
    • 决定优化竞价 的是Pacing算法的核心,包括反馈系统让Pacing记录下来。CTR是点击率。我们使用相同理念来看 查看率(VTR)和转化率(CVR)。这些值的精确性会稳步提高,也受各种因素影响,比如广告类型,受众,时间点,广告上下文等。
  • Pacing的重要性 #card
    • Pacing在给定预算下最大化广告主的利润。

    • 它让广告主更加真实,和Vickrey–Clarke–Groves (VCG通过计算一个广告主参加拍卖给别的广告者带来的损失之和来定价的) 拍卖,这里面欺骗价值没有任何好处,也没有必要去想最大竞价应该设多少。

    • 如此可以避免拍卖系统中的特殊机会。

3.3.2 预算控制(Budget Pacing)

  • 媒体流量比较大,广告主预算消耗过快,有些中小广告主甚至在开始投放的几分钟内就把预算消耗完。这会导致广告主早早退出后续流量的竞争,不仅会影响广告主体验(无法触达到更多的优质用户),也导致整个广告不平稳(竞争都集中在早期,而后期又竞争不足);预算控制(Budget Pacing)的作用就是平稳花掉广告主的预算,并帮助广告主优化转化效果。所以我们预算控制要完成如下目标:#card
    • ① 广告匀速播放:通过广告日预算、当前消耗以及日曝光曲线来控制广告投放速度

    • ② 提升广告主ROI:帮助广告主以更低的价钱拿到更多优质曝光量。

预算控制的做法目前可分为两大类:#card

  • Probabilistic throttling 通过一个概率值来决定是否参竞来控制预算花费速率

  • Bid modification 则通过直接改价的方式来控制花费速率。

对比 Probabilistic throttling 和 Bid modification 两个方案的差异点: #card

  • ① Probabilistic throttling 是通过调整参竞概率调整预算消耗速度,而 Bid modification 则是通过改变bid,控制竞价胜率来达到影响预算消耗速度,这种方式有可能导致预算消耗波动较大;

  • ② bid landscape(竞价环境) 一般会随着时间变化而变化;另外对于那些快耗尽预算的广告,bid 可修改的幅度很小,且bid一般存在着保留价,可调整的幅度很小,而且往往bid的变化与实际曝光量不成正比;

  • 以上两点使得通过 bid modification 来达到预算匀速消耗比较困难

预算控制Budget Pacing

  • Step1: 实现广告预算能够均匀的消耗 :#card

    • 首先根据历史数据,预测出当天大盘总曝光数。

    • 然后基于其曝光情况,在当前时间片,假如已消耗 / 当天预的比例大于大盘已曝光 / 大盘总曝光的比例,

      • 则说明预算已经消耗过快,需要减小消耗的速度,

      • 反之则要加快消耗的速度。

  • Step2:实现预算均匀消耗后,尝试优化成本#card

    • 前文介绍的预算均匀消耗实现方案本质上是随机丢弃,

    • 优化主要思路是:我们在放弃请求的时候可以选择性放弃一些低质量(点击率较低)的请求,而对应高质量的请求我们提高参与竞价的概率,从而提升转化率。


@LiRank: Industrial Large Scale Ranking Models at LinkedIn

想法

  • 主要是工程实践经验,完全覆盖搜广推系统的方方面面。如果没有遇到过相关的问题,看起来完全是天书。当成是手册查询吧。

Large Ranking Models

Training scalability

  • [[4.1 4D Model Parallelism]] 解决训练过程中 embedding 表梯度同步存在性能瓶颈

  • [[4.2 Avro Tensor Dataset Loader]] 解决训练过程中 io 瓶颈

  • [[4.3 Offload Last-mile Transformation to Asynchronous Data Pipeline]] 优化训练过程

  • [[4.4 Prefetch Dataset to GPU]] 预取数据到 GPU

Experiments

  • [[5.1. Incremental Learning]]

    • 两个场景增量学习效果
  • [[5.2 Feed Ranking]]

    • 通过 replay metric 评估 3 中策略的效果
  • [[5.3 Jobs Recommendations]]

  • 5.4 Ads CTR

    • 效果 #card
      • 基线 GDMix model

image.png

6 Deployment Lessons

  • 6.1 Scaling up Feed Training Data Generation

    • 没太看明白,感觉是优化性能实现用 100% sessions 进行训练
  • 6.2 Model Convergence

    • [[DCNv2]] 初始训练不收敛 #card
      • 对数值输入特征应用批量归一化,在当前训练步数下存在欠拟合,但是增加训练步数会导致实验速度下降。

      • 增加 warm-up steps 稳定训练,且可以使用三倍学习率


@漫谈"搜推广"之推荐和广告算法异同

漫谈"搜推广"之推荐和广告算法异同 - 知乎

  1. 宏观上–广告与推荐业务目标不同:
  • ① 推荐算法本质上是解决 用户体验 的问题

  • ② 广告(“广而告之”谓之广告)算法,不仅要满足用户需求,更多的是需要平衡广告主、用户和广告平台三者之间的利益关系,较多的考虑广告主的推广诉求。再直白一些:#card

    • 广告算法的目标是为了直接增加公司营收,这也是一切互联网产品的本质(无论是BAT/TDM还是号称永远免费的360)–天下没有免费的午餐。
  • ③ 策略差异大但预估模型同源 #card

    • :A. 推荐算法和广告算法在一些策略特别是机制方面差异性很大;

    • B. 但两者在常规的预估模型算法又非常相似。

    • 推荐算法虽然本质上虽然也是为了增加公司收入,但其直接目标是为了增加用户的参与度。比如博客《多场景多业务建模》所提到的方法,既适用于推荐又适用于广告。

[[2. 微观上-- 新闻资讯Feed流 VS 电商Feed流中的(推广商家)广告]]

[[3. 具体的 – 架构之预估与机制]]

  1. “推广”小结
  • 4.1 “推广”异同#card

    • ① 本文对广告和推荐在多个方面进行了阐述,二者的优化目标不同,涉及的利益群体不同,面临的约束也不同。

    • ② 对于CTR预估这一块,两者的迭代思路或演进路线,基本一致;对于机制策略这一块,两者差异非常大。

  • 4.2 “推广”面临的挑战 #card

    • ① 广告算法的问题更加琐碎,各模块协同工作找到平台全局利润最大化方法的难度非常大,系统异常复杂到难以掌控的地步!

    • ② 推荐算法这边,问题往往卡在长期利益与短期利益的平衡上,在模型结构红利消失殆尽的今天,如何破局!


MLA 引入 RoPE

由于RoPE的存在导致前文所说的上投影矩阵不能直接合并成一个,中间隔着一个旋转编码矩阵:#card
image.png

DeepSeek的解决方法是,直接在原有 q,kq, k 后拼接 dhRd_h^R 维的位置向量,计算过程为:#card
image.png

前段时间,笔者也很荣幸跟DeepSeek团队讨论过这个问题,但这个问题可以说非常本质,所以当时笔者实际上也没能提出什么有效的建议。最简单的方式是放弃RoPE,换用其他基于Attention Bias的位置编码,如ALIBI,但DeepSeek的实验显示它明显不如RoPE(注意,MLA不是不能加RoPE,而是加了RoPE之后无法用恒等变换技巧来减少KV Cache),笔者也提议过换Sandwich,它不像ALIBI单调衰减到负无穷,估计效果会好些,但感觉是治标不治本。#card
image.png

最后发布的MLA,采取了一种混合的方法——每个Attention Head的Q、K新增 #card
image.png


Better & Faster Large Language Models via Multi-token Prediction

motivation 训练和推理阶段对比

  • 传统方法的问题(预测下一个token):#card

    • 训练阶段:token-by-token生成,是一种感知局部的训练方法,难以学习长距离的依赖关系。

    • 推理阶段:逐个token生成,推理速度较慢

  • MTP方法(一次预测多个token):

    • 训练阶段:#card

      • 通过预测多步token,迫使模型学到更长的token依赖关系,从而更好理解上下文,避免陷入局部决策的学习模式。

      • 同时一次预测多个token,可大大提高样本的利用效率,相当于一次预估可生成多个<predict, label>样本,来更新模型,有助于模型加速收敛。

    • 推理阶段:#card

      • 并行预估多个token,可提升推理速度

共享 Transformer 的主网络,接入 4 个并行预估头,然后输出
image.png

  • 主干网络就是训练好的decoder-only的多层Transformer的网络,#card

    • tt 个输入token xt:1=xt,,x1x_{t: 1}=x_t, \ldots, x_1 经过主干网络计算,最终输出隐层表示:zt:1z_{t: 1}(来自于 xt:1x_{t: 1} 编码结果)。

    • zt:1z_{t: 1} 上面接了多输出Head,每个Head负责预估一个token, Head1{ Head}_1 负责预估 next token, Head2\mathrm{Head}_2 负责预估 next next token,以此类推

  • Head 是一个Transformer层(包括 MHA+2层FFN),#card

    • 且每个Head的Transformer层是独立的,非共享的,经过这层处理后的结果记作:fhi(zt:i)f_{h_i}\left(z_{t: i}\right)
  • 最后再将 fhi(zt:i)f_{h_i}\left(z_{t: i}\right) 送入到词表投影层( fuf_u 包括1个投影矩阵+1个Softmax),预估每个词的概率分布。#card

    • 最终通过某种采样方法(如:greedy,beam search等)生成token。

    • 注意,这个词表投影层是原预训练网络(original model)的投影矩阵+Softmax,多Head是共享的。

[[@deepseek技术解读(2)-MTP(Multi-Token Prediction)的前世今生]] 重新画图
image.png

  • 和 [[Blockwise Parallel Decoding for Deep Autoregressive Models]] 区别#card

    • 图2是2层FFN, 图6是一个Transformer

    • 图6 除了可按图2方法一样可做并行推理,本文也重点考虑模型加速训练的优化,在模型训练时,多个头都会并行计算loss时,提升样本利用效率和加速模型收敛。


为什么要做MTP

针对token-by-token生成效率的瓶颈,业界很多方法来优化,包括减少存储的空间和减少访存次数等,进而提升训练和推理性能。

  • 本文要学习的MTP方法,也是优化训练和推理效率的一个分支系列。

核心思想:通过解码阶段的优化,将1-token的生成,转变成multi-token的生成,从而提升训练和推理的性能。具体来说,#card

  • 在训练阶段,一次生成多个后续token,可以一次学习多个位置的label,进而有效提升样本的利用效率,提升训练速度;

  • 在推理阶段通过一次生成多个token,实现成倍的推理加速来提升推理性能。


Group Relative Policy Optimization

核心思想 :-> 对于每个问题,从旧策略中采样多个输出,然后根据这些输出的奖励来优化新策略。
GRPO的结果监督 #card

  • 对每个问题 qq ,从 πθold \pi_{\theta_{\text {old }}} 中采样一组输出 {o1,o2,,oG}\left\{o_1, o_2, \ldots, o_G\right\}

  • 用一个奖励模型评估得到 r={r1,r2,,rG}\mathbf{r}=\left\{r_1, r_2, \ldots, r_G\right\} ,然后对这些奖励进行归一化。

  • 结果监督就是基于归一化的奖励计算:A^i,t=rimean(r)std(r)\hat{A}_{i, t}=\frac{r_i-\operatorname{mean}(\mathbf{r})}{\operatorname{std}(\mathbf{r})} ,从而通过目标式(2)进行优化。

GRPO的过程监督:

  • 过程监督是对推理的每一步都进行评估,因此奖励模型的评估输出为#card

    • R={{r1index(1),,r1index(K1)},,{rGindex(1),,rGindex(KG)}}\mathbf{R}=\left\{\left\{r_1^{i n d e x(1)}, \ldots, r_1^{i n d e x\left(K_1\right)}\right\}, \ldots,\left\{r_G^{i n \operatorname{dex}(1)}, \ldots, r_G^{i n d e x\left(K_G\right)}\right\}\right\}

      • 其中 index(j)\operatorname{index}(j) 表示第 jj 步结束的token index,

      • KiK_i 是第 ii 个输出的总步数,

    • 同样的进行归一化有 r~iindex(j)=riindex (j)mean(R)std(R)\tilde{r}_i^{i n d e x(j)}=\frac{r_i^{\text {index }(j)}-\operatorname{mean}(\mathbf{R})}{\operatorname{std}(\mathbf{R})}

  • 然后计算每个token的优势函数为:#card

    • 对该token之后的step的归一化奖励进行求和,即 A^i,t=Σindex (j)tr~iindex(j)\hat{A}_{i, t}=\Sigma_{\text {index }(j) \geq t} \tilde{r}_i^{i n d e x(j)}

GRPO 的整体过程如下图所示 #card
image.png

πθ(oi,tq,oi,<t)\pi_\theta\left(o_{i, t} \mid q, o_{i,<t}\right) 公式中的 t 是对应token-level优势,即一个句子中,每个token对应的 优势 是一样的
1Gi=1G1oit=1oi\frac{1}{G} \sum_{i=1}^G \frac{1}{\left|o_i\right|} \sum_{t=1}^{\left|o_i\right|} 中的 G 和 o 理解 #card

  • 1G\frac{1}{G} 的意思是一个query生成的一个组的回答个数,最终需要取平均,

  • 1oi\frac{1}{\left|o_i\right|}表示的是对每一个生成的回答所有的token进行求平均

clip 作用 #card

  • clip策略限制了 πθπθold\frac{\pi_\theta}{\pi_{\theta o l d}} 之间的比值,通过将比值限制在 [1ε,1+ε][1-\varepsilon, 1+\varepsilon] 之间,防止新策略相对于旧策略的数值有较大的更新变动

  • clip机制确保策略更新处于控制范围内,稳定性更强,收敛性更好,确保模型训练过程中的稳定性和效果

KL 散度正则化的作用 #card

  • KL 散度主要是为了衡量当前新策略 πθ\pi_\theta 和参考策略 πref\pi_{r e f} 之间的分布差异,β\beta 表示的是惩罚系数,目标是为了限制 πθ\pi_\thetaπref\pi_{r e f} 偏离太远

  • DKLD_{K L} 变大时,惩罚增加,迫使策略更新更加保守,不要偏离太远

  • β\beta 系数控制正则化强度,β\beta 变大的时候,表示在原有的优势上增加惩罚,让模型更新幅度变小,更加保守


图4-1解:GRPO公式解析

image.png
occlusion:: eyIuLi9hc3NldHMvaW1hZ2VfMTc0MTM1MTg5Nzc2NV8wLnBuZyI6eyJjb25maWciOnt9LCJlbGVtZW50cyI6W3sibGVmdCI6MTA4NS45MzE3MTc0OTA0MDksInRvcCI6Njg0Ljc4OTgxMzk5MzgwMzEsIndpZHRoIjo2MjIuNTAwMTAyNzg0MDY4MywiaGVpZ2h0IjoxMjQuMjQ2MjIwNTQ0NzM2MzksImFuZ2xlIjowLCJjSWQiOjF9LHsibGVmdCI6MTA0Mi40NzQwNjE5NDQyNjk0LCJ0b3AiOjg1NC40MTM1MjE3NzQzMDgsIndpZHRoIjo2NzkuNDI1Nzk4MDk4Mjk5LCJoZWlnaHQiOjE1OC4zMzQyMTMzODQwNzc1NCwiYW5nbGUiOjAsImNJZCI6Mn0seyJsZWZ0IjoyMzguNTExMzg3NjQ0NDc2MDYsInRvcCI6NDEyLjEyMTQ5ODM4OTk1MjkzLCJ3aWR0aCI6NDMxLjMyNzE0Nzk4OTc2MTU2LCJoZWlnaHQiOjE2OS41ODAwNzI2NDQ4MjQwNywiYW5nbGUiOjAsImNJZCI6M30seyJsZWZ0IjozODUuMzc3MzE1ODk2NzEyMSwidG9wIjo3OS42MjEyODk5NTY4ODE4NSwid2lkdGgiOjcwMC43MzM2MzIyMDY0MjU3LCJoZWlnaHQiOjkxLjI0MzAyNDU3MDk4MTg1LCJhbmdsZSI6MCwiY0lkIjo0fV19fQ==


CVR 去偏

并行多任务模型 [[ESMM]] [[ESM2]]

image.png

+ 核心思想 :-> 并行多任务模型(例如ESMM)通过CTR任务以及一个辅助任务CTCVR来间接计算CVR。
+ 优点:这样做的好处是CTR和CTCVR任务都可以在  **全曝光**  样本上训练,而模型在线预测的时候,也在  **全曝光**  样本空间进行预测排序。
  + 如何求点击后转化率 #card
    + 并行多任务模型是通过 $p(t=1 \mid x)=p(o=1, r=1 \mid x)=p(o=1 \mid x) * p(r=1 \mid x, o=1)$ ,在全曝光空间,先求出点击率 $p(o=1 \mid x)$ 和点击转化率 $p(t=1 \mid x)$ ,再间接求出点击后转化率 $p(r=1 \mid x, o=1)$ 。

  + 这样就消除了训练空间与推断空间之间  **不匹配**  的问题,因而可以缓解点击空间训练数据稀疏,选择偏差的问题。
+ 缺点:并行结构,忽略了点击到转化之间的依赖关系,也就是  **PIP(potential independence priority)**  问题。
  + 现有的并行多任务模型结构实际上对应的是另一个概率公式,即 :-> $p(t=1 \mid x)=p(o=1 \mid x) * p(r=1 \mid x)$ 。

多门的多任务学习模型 (例如:Cross Stitch、MMOE、PLE、MOSE、AITM)

image.png

+ 核心思想、优点 :-> 多门(Multi-Gate)多任务学习模型考虑了不同任务之间的相关性和差异性,用Gate的方式来控制不同专家的组合方式。在曝光空间预测CTR, 在点击空间预测CVR。
+ 缺点 :-> 这些模型还是没有解决数据  **Missing not at radom(MNAR)**  的问题。

基于倾向性的因果纠偏模型

  • [[@LARGE-SCALE CAUSAL APPROACHES TO DEBIASING POST-CLICK CONVERSION RATE ESTIMATION WITH MULTI-TASK LEARNING]] 因果推断相关第一篇

    • 这篇文章聚焦于由 非随机缺失(MNAR) 带来的样本选择偏差(SSB)。具体产生问题的原因 #card
      • 现有方法将曝光空间->点击空间中丢弃的样本视为随机丢失。

      • 一般点击、转化率比较高的样本才能进入点击空间,因此只考虑点击空间会导致CVR预估值比曝光空间的CVR预估值高。

      • 这篇文章从因果角度进行 CVR 估计(去偏),并解释了非随机缺失的原因。

  • [[ESCM2]]

    • [[用IPS实现CVR建模]]

image.png

    +  **点击倾向性(点击率)偏高**  的样本更容易进入到点击空间。
    + 因此为了消除  **点击事件上点击倾向性(click propensity)对后面转化事件**  的影响,从而得到一个条件无偏的转化率估计 $p(r=1 \mid d o(o=1), x)$ ,IPW(inverse propensity weighting)的策略被广泛应用来纠偏选择偏差,解决MNAR问题。
  + [[propensity score 一定能给 cvr 去偏吗?]]

+ [[用DR实现CVR建模]] #card
  + IPW在点击空间无偏的前提是点击率要预测准确,然而在现实应用场景很难确保这一点,因此提出了DR模型来缓解这个问题。

  + 核心思想:除了IPW多任务模型的点击任务,转化任务,DR模型还利用了一个归咎(imputation)任务来预测转化任务的误差,即CVR loss $\left(e_{i, j}=e\left(r_{i, j}, \hat{r}_{i, j}\right)\right)$ 的预测值( $\hat{e}_{i, j}$ )。而最终DR模型对应的CVR loss function变成了

  + $$

\mathcal{E}^{\mathrm{MTL}-\mathrm{DR}}=\frac{1}{|\mathcal{D}|} \sum_{(i, j) \in \mathcal{D}}\left(\hat{e}{i, j}+\frac{o{i, j} \delta_{i, j}}{\hat{o}{i, j}}\right) \text {, 其中 } \delta{i, j}=e_{i, j}-\hat{e}_{i, j} \text { 。 }

+ [\[\[@DCMT: A Direct Entire-Space Causal Multi-Task Framework for Post-Click Conversion Estimation\]\]](/post/logseq/%40DCMT%3A%20A%20Direct%20Entire-Space%20Causal%20Multi-Task%20Framework%20for%20Post-Click%20Conversion%20Estimation.html) + Res-IPS/DR:Removing Hidden Confounding in Recommendation: A Unified Multi-Task Learning Approach 北大 NIPS2023 这是一篇纯学术界文章,将因果推断领域的一些结论应用到推荐系统中。(学术界的文章是真晦涩难懂,车轱辘话反复说。不得不佩服,就一个残差和无偏数据,也能吹出一篇文章来) + [[@Utilizing Non-click Samples via Semi-supervised Learning for Conversion Rate Prediction]] 以半监督的方式解cvr未点击样本上学习有偏的问题 ## [[Ref]] + [[@汇总|6篇文章带你了解CVR去偏现状]]


@PPO与GRPO中的KL散度近似计算

PPO与GRPO中的KL散度近似计算 - 知乎

标准 [[KL Divergence]] 计算公式 KL(qp)=xq(x)logq(x)p(x)=Exq[logq(x)p(x)]K L(q \| p)=\sum_x q(x) \log \frac{q(x)}{p(x)}=\mathbb{E}_{x \sim q}\left[\log \frac{q(x)}{p(x)}\right]

  • 在实际计算中,直接计算 KL 散度可能非常困难,主要原因如下:#card
    • 需要对所有 x 进行求和或积分,计算成本高。

    • 计算过程中可能涉及大规模概率分布,导致内存消耗过大。

[[K1 估计器]] 计算公式 :-> k1=logq(x)p(x)=logrk 1=\log \frac{q(x)}{p(x)}=-\log r

  • 为什么是 KL 的无偏估计 #card

    • E[k1]=Exq[logq(x)p(x)]=KL(qp)\mathbb{E}[k 1]=\mathbb{E}_{x \sim q}\left[\log \frac{q(x)}{p(x)}\right]=K L(q \| p)
  • K1 估计器的方差较大,因为 #card

    • q(x)<p(x),k1q(x)<p(x), k 1 可能为负值,导致估计值波动大。

    • p(x)p(x)q(x)q(x) 差异大,k1k 1 可能出现较大的数值变化。

[[K2 估计器]] 公式 :-> k2=12(logp(x)q(x))2=12(logr)2k 2=\frac{1}{2}\left(\log \frac{p(x)}{q(x)}\right)^2=\frac{1}{2}(\log r)^2

  • K2 估计器是 有偏估计,但其方差较低,且 偏差在实证中较小,因为:#card
    • K2 确保所有样本的值都是正数,使其在计算中更加稳定。

[[K3 估计器]] 公式 :-> k3=q(x)p(x)1logq(x)p(x)=(r1)logr=(r1)+k1k 3=\frac{q(x)}{p(x)}-1-\log \frac{q(x)}{p(x)}=(r-1)-\log r=(r-1)+k 1

  • K3 估计器也是 KL(qp)KL(q \| p) 的无偏估计。证明如下:#card

    • 已知:E[k1]=KL(qp)\mathbb{E}[k 1]=K L(q \| p)

    • 我们只需证明:E[r1]=0\mathbb{E}[r-1]=0

    • 即:E[r]=1\mathbb{E}[r]=1

    • 展开计算:E[r]=Exq[p(x)q(x)]=q(x)p(x)q(x)dx=p(x)dx=1\mathbb{E}[r]=\mathbb{E}_{x \sim q}\left[\frac{p(x)}{q(x)}\right]=\int q(x) \cdot \frac{p(x)}{q(x)} d x=\int p(x) d x=1

  • K3 估计器恒大于等于 0。证明如下 #card

    • 设函数:f(x)=x1logx,(x>0)f(x)=x-1-\log x, \quad(x>0)

    • 求导数:f(x)=11xf^{\prime}(x)=1-\frac{1}{x}

    • 0<x<10<x<1 时,f(x)<0f^{\prime}(x)<0 ;当 x>1x>1 时,f(x)>0f^{\prime}(x)>0 。即,f(x)f(x)x=1x=1 处取最小值,且:f(1)=11log1=0f(1)=1-1-\log 1=0

    • 所以,对于任意 x>0x>0 ,均有:f(x)0f(x) \geq 0

PPO 算法中的 KL 近似计算#card
image.png

在 GRPO(Generalized Reinforcement Policy Optimization) 算法中,KL散度是显式融入到损失函数中,近似计算采用的是 K3 估计器,如下所示:#card
image.png


@DeepSeek中的强化学习:GRPO与RL统一视角

DeepSeek中的强化学习:GRPO与RL统一视角 - 知乎

[[RFT]]

[[DeepSeekMath]] 文章的核心在于强化学习算法GRPO提升LLM的数学推理能力

在LLM中PPO的优化目标为 #card

J_{P P O}(\theta)=E\left[q \sim P(Q), o \sim \pi_{\theta_{o l d}}(O \mid q)\right] \frac{1}{|o|} \Sigma_{t=1}^{|o|} \min \left[\frac{\pi_\theta\left(o_t \mid q, o_{<t}\right)}{\pi_{\theta_{\text {old }}}\left(o_t \mid q, o_{<t}\right)} A_t,\right. \
\left.\operatorname{clip}\left(\frac{\pi_\theta\left(o_t \mid q, o_{<t}\right)}{\pi_{\theta_{o l d}}\left(o_t \mid q, o_{<t}\right)}, 1-\epsilon, 1+\epsilon\right) A_t\right]
\end{gathered}

LLM中的PPO算法存在什么问题:#card + 在PPO中价值函数是和策略模型同样大小的另一个模型,回带来较重的内存和计算负担。 + 此外价值函数经常作为baseline来降低优势函数的方差 + 在LLM中奖励模型通常只对最后一个token评估奖励分,导致价值函数难以对每个token评估准确。 [\[\[Group Relative Policy Optimization\]\]](/post/logseq/Group%20Relative%20Policy%20Optimization.html) + [\[\[@PPO与GRPO中的KL散度近似计算\]\]](/post/logseq/%40PPO%E4%B8%8EGRPO%E4%B8%AD%E7%9A%84KL%E6%95%A3%E5%BA%A6%E8%BF%91%E4%BC%BC%E8%AE%A1%E7%AE%97.html) 计算无偏估计方法 #card + $D_{K L}\left[\pi_\theta \| \pi_{r e f}\right]=\frac{\pi_{r e f}\left(o_{i, t} \mid q, o_{i,<t}\right)}{\pi_\theta\left(o_{i, t} \mid q, o_{i,<t}\right)}-\log \frac{\pi_{r e f}\left(o_{i, t} \mid q, o_{i,<t}\right)}{\pi_\theta\left(o_{i, t} \mid q, o_{i,<t}\right)}-1$ [[LLM 中强化学习讨论]] + 至此deepseek将这几种方法纳入到了统一的RL视角中,并总结了在数据源(问题和对应输出)、奖励函数和梯度项的差异,这样看确实更一目了然。 [[问题来了:为什么RL是work的,如何设计更有效的RL方法?]] GRPO的过程监督这里写的不太对。他们将推理过程分成了一个个的step。每一个step会统计一个reward。#card + 对于每一个token,将大于这些token后的归一化后的step的reward加起来,就是最终的Ait。 + 顺便说一下,结果监督和过程监督这里应该是并列关系。由于结果监督是采样到完成的o后,才会产生一次reward信号,则不够高效,所以后面又提出过程监督,增加效率。 + 感谢,这里粗糙了,我补一下。r1-zero中设有两个奖励信号,一个是判断回答是否正确,一个是回答的格式奖励。 但是再R1-zero中,deepseek应该把过程监督去掉了,只用结果监督应该就行了,有点像alpha go zero,将终局的reward信号直接分发给中间的每个st,at。#card + 取消过程监督的原因是the neural reward model may suffer from reward hacking in the large-scale reinforcement learning process,推理过程中的奖励信号不一定准确,推理过程中奖励高不代表结果正确


DeepSeek 学习

原始论文

  • [[DeepSeekMath]] [[2024/04]] 提出GRPO算法和RL统一视角的讨论

  • [[DeepSeekMoE]] 在tfm的FFN层做了更细粒度的多专家DeepSeekMoE结构。

  • [[DeepSeek V2]] 中提出了高效经济的语言模型。结构上主要有两点,

    • 一个是提出了MLA,由于应用旋转矩阵相对位置编码,在MLA中额外采用一定维度的向量单独作为位置信息拼接起来。

    • 另一个是沿用DeepSeekMoE,v2及之后的文章也用到了GRPO。

  • [[DeepSeek V3]] 依然采用了v2中的MLA和DeepSeekMoE结构,并且采用了多token预测(MTP:multi-token prediction)。此外v3还采用了FP8混合精度训练,介绍了ds的训练框架,甚至对AI硬件供应商(计算硬件和通信硬件)提了一些改进建议。

    • [[@DeepSeek-V3参数详细计算]]

    • DualPipe

    • FP8混合精度

  • [[DeepSeek R1]] 力推RL在增强LLM推理能力的作用。在r1中首先介绍了r1-zero,即没有经过SFT直接进行一个大规模强化学习训练,r1-zero展示出强大有趣的推理行为,但也遇到了一些问题比如可读性差、语言混淆等。继而ds提出了r1:在经过RL学习之前,先进行多阶段训练和冷启数据学习,并且进行模型蒸馏来提升小模型的推理能力。

[[LLM 中强化学习讨论]]

MTP [[Better & Faster Large Language Models via Multi-token Prediction]]

  • [[为什么要做MTP]]

  • [[MTP 损失函数]]

  • [[MTP 节省内存实现]]

  • [[为什么 MTP 是 work 的?]] 从两个角度进行了说明MTP向前多预估几个token有助于学习序列中的"关键决策点"。

    • [[Multi-token prediction loss assigns higher implicit weights to consequential tokens]]
  • [[DeepSeek MTP]]

    • [[DeepSeek MTP 模型推理过程]]

    • [[Deepseek MTP 训练前向推理例子]]

  • 参考文章

    • [[@Multi-token prediction 多词预测]]

    • [[@deepseek技术解读(2)-MTP(Multi-Token Prediction)的前世今生]]

    • DONE [[@DeepSeek中的Multi-Token Prediction]]

    • [[@Deepseek-v3技术报告-图的逐步解析-3-不容易看懂的MTP-公式有拼写错误]]

[[LLM开源大模型汇总]]

[[LLM 中的 Attention]]

[[MoE]]

  • [[DeepSeekMoE]] 架构

  • [[@MOE介绍及其LLM方案整理]]

Ref


@召回源是否应该作为特征加入排序模型中?

关于一个特征a该不该加入排序模型中,可以用一个非常一般的准则来判断 :-> p(y|X,a)是不是平稳(不变)的

  • 其中y是预测目标,X是已有的其它特征。如果忽略a和X的相关性,则可以进一步简化为 p(y|a) 是不是平稳的。
  • 考虑召回通道会存在增减、每个召回通道的效果自身也在迭代,p(y|a)应该不满足这个准则,所以 不应该 加入排序模型。

@日久见人心:论建模用户长期兴趣的几种姿势

链接: 日久见人心:论建模用户长期兴趣的几种姿势 - 知乎

[[行为序列建模]] 分类在线提取和离线提取

[[DIN]] 当给用户呈现不同的target item时,会唤醒用户历史中的不同部分 , 因此history item embedding在聚合成user interest embedding时应该有不同的权重。

  • DIN 用target item和每个historical item做attention 来确定这个权重

    • 和target item相似的historical item,:-> 权重高一些,在组成user interest embedding时发挥更大使用;
    • 和target item不相似的historical item embedding,:-> 权重低,组成user interest时影响小;
    • 整个过程的时间复杂度是 :-> O(LBd)O(L * B * d),L=user sequence length, B=batch_size, d=embedding dimension
      到目前so far so good。但是当要考虑用户长期历史,L由百变成了万,O(LBd)O(L * B * d) 是在线serving和training都无法接受的。此时,阿里的解决思路是:
  • DIN用target item给所有historical item加权或降权,算是一种soft filtering 既然在long sequence上再做soft filtering的代价太大,干脆就直接上hard filtering :-> 在long sequence中筛选(搜索)出与target item相关的一个Sub Behavior Sequence(SBS)。

  • SBS的长度一般是 百级 ,相较于原始万级的long sequence大大缩短,再在SBS上实施DIN,开销就小多了,足以支持在线推理和训练。
    [[SIM]] 特点是 :-> 先过滤,再注意

  • [[Hard Search]]

    • 拿target item的 某个attribute(e.g., category) 在用户完整的长期历史中搜索,得到 有相同attribute 的historical item组成SBS。

    • 为了加速搜索过程,阿里还特别设计了User Behavior Tree(UBT)这一数据结构。UBT其实就是一个双层的map,#card

      • 第一层map的key是userId,

      • 第二层map的key=category,

      • 真正的value就是某个用户在某个category下的SBS。

    • 虽然简单,但是据论文中所说,效果和soft-search差不多,反而性能优秀,维护方便。

  • [[Soft Search]]

    • 正如我在 [[@无中生有:论推荐算法中的Embedding思想]] 中指出的,hard-search拿attribute进行精确匹配,不如用embedding进行“模糊查找”的扩展性好。于是,很自然想到用target item embedding在long sequence中 :-> 查找与之距离最近的K个historical item embedding,组成SBS

    • 至于item embedding从何而来?

      • SIM的原文里,:-> 是只用target item和user long history sequence组成一个ctr model。模型训练完的复产品就是item embedding。
      • 除此之外,用双塔召回/粗排得到的item embedding行不行?用word2vec算法套用在user behavior sequence得到的item embedding,行不行?我觉得,理论上是没毛病的,都可以试一试,让 GAUC和online A/B testing 来告诉我们具体用哪种是最好的。
    • 但是值得注意的是,SIM的论文里指出, 用户长短期行为历史的数据分布差异较大 ,建模user short-term interest的item embedding不要复用于建模user long-term interest。也就是说,同一个item id在用于建模长期兴趣与短期兴趣时,对应完全不同的item embedding。

      • 基于同样的原因,如果你想用双塔模型的item embedding来进行soft-search,:-> 你的双塔模型最好也拿long user behavior sequence来训练。如果嫌long user behavior sequence拖慢训练速度,可以从中采样一部分。
    • 在long user behavior sequence中搜索时

      • 肯定不会拿target item embedding与每个 historical item embedding逐一做dot product。如前所述,这么做的时间复杂度是 :-> O(LBd)O(L * B * d) ,是无法上线的。
      • 先离线将所有historical item embedding建立好索引。在线推理或训练时,拿target item embedding在索引中搜索的复杂度能够降为 :-> O(log(L)Bd)O(\log (L) * B * d)
      • SIM原文倒是没提拿item embedding建立 索引 的事,是在接下来要讲的ETA文章中提到,SIM[21]also tried to building an offline inverted index based on the pre-trained embedding.
        到目前为止,又是so far so good了,按SIM论文的说法,SIM(我猜应该是SIM hard-search)能够轻松建模长度=10000的用户行为序列,甚至长度= 54000 的行为序列也不在话下。
        SIM是两阶段法,第一阶段就用target item搜索用户长期行为序列,缩减成SBS;第二阶段,才将SBS和其他特征(比如用户短期序列)一起建模ctr model。问题就出在,这第一阶段“搜索”与第二阶段“ctr建模”之间存在gap。
  • 第一个gap:两阶段的目标不一致 #card

    • ctr model目标是将ctr预测准

    • 而SIM hard search所使用的“attribute相同”原则,和这个目标的关系不那么直接

  • 第二个gap:两阶段的更新频率不一致 #card

    • ctr model需要以online learning的方式频繁更新,以捕捉用户实时的兴趣变化

    • 而无论SIM hard/soft-search中所使用的索引都是离线建立的

  • 为了弥补以上两个gap,阿里做法是 :-> 拿第二阶段ctr model所使用的item embedding来进行第一阶段的Top-K retrieval(也就是search)

    • 如何消除两阶段在目标上的gap :-> ctr model用到的item embedding为最终优化目标负责,拿它进行top-k retrieval
    • 如何消除两阶段在更新频率上的gap :-> 训练的时候,ctr model优化了item embedding,也就优化了top-k retreival

但是如前所述,拿target item embedding(也是来自ctr model)与long sequence逐一做点积来search top-k similar items,时间复杂度= O(LBd)O(L * B * d) ,无法上线

  • SIM-soft的方法是用pre-trained embedding离线建立索引,时间复杂度降为 :-> O(log(L)Bd)O(log(L) * B * d)

  • 而这一次,阿里想摆脱离线建立索引带来的两阶段gap,无法改变L那一项,因此只能优化d。

[[End-to-End Target Attention]] :一套Embedding,既过滤,也注意

  • ETA用 **SimHash ** 算法,避免用dot product检验target item与historical item之间的相似性,太耗时间

    • 将原本d-dim的item embedding压缩成 一个log(m)-bits的整数 ,称为embedding的hash fingerprint。
    • embedding 之间的相似性可以 **fingerprint之间hamming distance ** 来衡量,时间复杂度由dot-product的O(d)降为O(1)。
  • 某次online learning结束之后,导出item embedding的时候,各item embedding的fingerprint就提前计算好。这样online serving时,top-k retrieval的时间复杂度就降为了 O(LB1)O(L * B * 1) #card

    • 由于top-K retrieval的时间缩短了,就允许我们无须离线建立索引,而是在线上直接将ctr model中最新的item embedding用于top-K retrieval了。
  • 看上去,很好很强大。但是毕竟ETA中top-k retrieval与L呈线性关系,对序列长度的限制还是很大的。所以,SIM论文中在industry dataset实验时,所取的用户行为序列的长度还过万,而在ETA中序列长度就下降到了 千级
    [[离线提取长期兴趣]]

本文总结了建模用户长期行为序列的几种姿势。按照提取用户长期兴趣发生在“线上”还是“线下”,相关算法可以划分为“在线派”和“离线派”两大技术路线:

  • 在线派,以阿里的SIM/ETA为代表

    • SIM算是DIN“千物千面”思想在用户长期行为序列上的延伸
      • 为了节省时间,DIN中target item给historical item加权或降权的soft-filtering,被替换成 :-> Search这种hard-filtering。

      • SIM采用两阶段法:

        • 第1阶段 :-> 先拿target item筛选user long behavior sequence,只保留其中与target item相关的item组成SBS;
        • 第2阶段 :-> 再拿target item在SBS上进行attention,实现用户长期兴趣表达的“千物千面”。
      • 为了加速Search,SIM :-> 需要根据attribute或pre-trained embedding在user long behavior sequence上建立索引。

    • ETA是为了解决SIM两个阶段之间的information gap而提出的
      • 如何将检验两个向量相似度的时间复杂度由O(d)降低为O(1) #card

        • 通过SimHash,ETA用[[hamming distance]]取代dot-product
      • 因为检验两向量的相似度被大大加速, 我们可以用同一套item embedding,既用于第2阶段的ctr预估,也用于第1阶段的Top-K similar item retrieval ,从而削除了两个阶段间的information gap

  • 离线派

    • “在线派”技术很好很强大,但是需要对 工程架构 做很多优化改造,才能满足上线要求。
    • “离线派”技术路线,将复杂耗时的“提取用户长期兴趣”这一工作由线上转移到线下,不必对线上架构做大幅改造,容易上线。#card
      • “离线派”技术路线,或手工挖掘用户在某一个长时间段上的各种指标,或离线将表达用户长期兴趣的embedding训练好,缓存起来,供线上模型调用。

      • 在某些场景中,“离线派”技术路线取得了比“在线派”技术路线更好的效果。


中国的朝代更替

id:: 67cc016a-a71b-49e4-ace4-e973e013b68d

中国与西方最大的不同,是历次革命都要推倒重来,革命总是伴随着血琳琳的屠杀和破坏,无论是财富还是文化。#card

  • 每次建朝人民都要从一穷二白做起,所以才说中国人民苦难深重,几千年的历史,居然没有什么积累,有的只是统治者根深蒂固的帝王思想世代传承。

  • 从项羽焚烧阿房宫到近代的破四旧,革命的都非常彻底,人民洗脑也非常彻底。所以帝国时代才能够一直延续。西方人贪婪对财富是占有和继承,东方人重义轻利所以破坏焚烧和屠杀。

  • 西方的大革命产生了资产阶级新贵阶层,然而当时却不为普通群众接受,尽管他们有钱有势,但是却得不到群众的尊敬,直到资产阶级新贵们捐钱捐物,为群众做了大量的善事之后,才得到人民的认可。

而我们这个时代产生的新贵却太多的为富不仁。

  • 而中国古代的乡村,通常族长就是村子里的大地主,族长是非常重视名胜的,一个族长必须有足够的威望,象修桥补路,借无米下锅的族人粮食,都是族长份内的事。#card
    • 去徽州旅游的人都知道,道路、桥梁等公益设施无不是富商修建。

    • 古人不但讲个人声望,还讲积阴功。

    • 假设你去贵州的深山中旅游,发现山径上常常有个亭子,不但有坐的地方,还有水井或者用水管从山上引来的泉水供路人休息。这都是周围的村里人为积阴功修建的,绝非政府投资。

    • 时值社会主义的今天,反而一切行善积德的事都不讲了,全民金钱至上。没有文化建设的民族是悲哀的。


历史总是惊人的相似

汝爱之罪:

  • kkndme: 赞赏这一句,呵呵,历史规律是不变的,变化的只是时间、地点、人物、事件。

  • 城头变换大王旗。

tjOOSAN: 历史规律是不变!但他妈世界变了!~~ 中国采用资本主义制度了.还只参考中国历史?

  • kkndme: 你知道什么叫资本主义制度吗?

    • #card 首先基础是三权分立。
      • 早在1748年,孟德斯鸠男爵发表了伟大的划时代的巨著“论法的精神”明确提出了三权分立。奠定了资本主义制度的基础。三权分立制度就是国家的立法、行政、司法三权分别由三个机关独立行使,并相互制衡的制度。讲的是法律精神,讲得是私人财产神圣不可侵犯。

      • 而作为一个人治而非法制国家,怎么能说是资本主义呢?

  • 建议个别(tjOOSAN)不读书,不研究,不了解中西方历史,不懂经济,对社会制度基本的理解基本是个白痴的同志,就不要乱发表议论了,惹人笑话。#card

    • 无论是中国还是西方历史对现在都是很有借鉴意义的。

    • 这就使毛说过的“古为今用,洋为中用”,毛建的武装斗争及建国思想其实很大程度来自于朱元璋。

  • 古代君主统治国家征服世界靠战争武器,现在则靠 金融武器 。#card

    • 西方,我们所熟悉的具备最纯正贵族血统的哈布斯堡家族,曾经的德意志王国和神圣罗马帝国的统治者,家族成员曾经统治过欧洲诸国:包括波希米亚王国 、匈牙利王国 、克罗地亚及斯洛文尼亚王国、伦巴第及威尼斯王国 、奥地利皇室领地 、萨尔茨堡公国 、塞尔维亚及塔米斯-巴纳特公国等等无数欧洲国家。

    • 而现在,哈布斯堡家族控制着华尔街,继而通过华尔街控制着全球的经济。

  • 历史是在继承的前提下发展的,特别是在西方,现在几乎每一个显赫的家族都能追根溯源。因为尽管西方也发生大革命,但是象文革一样彻底否定历史是完全不可思议的。#card

    • 我们有点英雄情结的人听到最多的西方中世纪十字军三大骑士团:圣殿骑士团、条顿骑士图案、医院骑士团;直到现在仍有两大骑士团存在。

      • 条顿骑士团总部现在还在德国,专门从事慈善事业。

      • 医院骑士团后来改名为马耳他骑士团,也就是现在的马耳他,世博会还来上海参展。

      • 只有圣殿骑士团灰飞烟灭,但现在仍有大量的修士组织自称为圣殿骑士团的继承人。

    • 完全不懂历史,就等于完全不懂得社会。


房价会出现很多上下波动

fengyu1218:

  • 楼主,你所分析问题透彻明晰,很受启发
    • kkndme: 你说的对,房价趋势是上涨,但一定会有短期的波动

#card tjOOSAN: 而且对于你所标榜的“暴涨” 你自己后来也改了,是在波动中上涨!那还是暴涨吗?你都违背了自己的标题。

  • kkndme:

  • 呵呵,短期的调控并不能改变长期上涨的趋势,

  • 当资金的运作规律收到外力的压制,短暂低头的房价就会迎来暴涨。这是规律。


通货膨胀的形成原因

我爱的飞飞:

  • 在谈谈通膨是怎么形成的。生产资料是有限的,生产资料其实一直都没有变,而货币只是一种虚拟附加值而已。#card

    • 像楼主所言,一个国家,有人手里有8元(假设他是建材行业的),有人有12元(假设是石油行业的),但是人心不足蛇吞象,建材行业的员工觉得不够用了,8元的想变成13元,石油行业的12元想变成20元。

    • 因此,建材行业把原来卖8元的水龙头提价成13元,对于石油行业的人,装修的时候拿着12元发现自己买不了13元的龙头了,于是琢磨着把石油卖到20元,由此各行业依次提价,物价越来越高,实际上水龙头还是水龙头,一桶石油还是一桶石油,生产资料始终没有变,稀少,远远不够人均分配,但是生产资料的价值变了,提高了。

    • 拿成都的房价为例,02年的时候成都人均收入800-1200,房价2000-4000,约为房价的3倍,现在成都人均收入2500-3000,成都房价7500左右,仍然为3倍比例,看似7500比2000翻了多翻,实际上房子作为所谓的生产资料,始终是稀缺的,在02年的时候,拿着当时的工资买4000的房子仍然不容易。

    • 任何时候,其实都是一种相对平衡的比例,而空军喜欢拿现在的工资跟过去的房价相比,但是那种状态太过理想,想明白的,就会觉得房子不贵。

  • 什么时候房价会下降,一句话供求关系,人口减少是房价下降的唯一出路。#card

    • 即便是出台房产税,很有可能富人顶着房产税不卖,变相加租抵消房产税,特别当今租房市场存在中介的操纵,很多房子都是通过中介渠道才租出,垄断的中介忽悠房东集体涨价,房产税很容易就转嫁给租房者。

    • 政府也不是完全不作为,当你开着车逛着公园坐着快铁地铁的时候,就应该加速印刷的钞票有一部分投入了基础设施建设,如果不通过税收和出让土地收入来建设,我们很可能还走在乡间小路上。

  • 虽然瓷器国是中yang高度集权的国家,但是任何朝代都是诸侯之间相互制约,上面出台个政策,各个诸侯执行与否或者执行是否到位都可以影响房价甚至很大影响,且不谈上面是不是真的想降房价,即便是动真格,下面的诸侯听不听招呼是另外一回事。#card

    • 有心无力的事情不是不可能发生。共同富裕其实是一种美好愿望,因为人与人的竞争天性,不可能人人平等,只要有人还想凌驾于其他人之上,就永远不可能GC主义。

任何社会都是这样的形态,忍无可忍-革命-平稳-不满足-垄断与剥削-改革-改革失败-再次忍无可忍。为何历史反反复复如此?就是因为人的劣根性,因为人性的贪婪。所以周而复始而已。#card

  • 人性的贪婪决定了社会进程,刚开始穷人只想平均,从富人手中夺取生产资料,当革命之后,穷人开始不满足于仅仅是平均,穷人想要凌驾于其他人之上,想变成富人,于是利用革命占有的各种手段获取利益,最终变成了富人,被凌驾的穷人再次想通过变革改变自己的地位。。。。如此循环。。。

人像模式

在所有的照片模式中,人像模式也是最为复杂的。因为 iPhone 相机,今天已经在人像模式里内置了两套在传统人像摄影中重要的系统光圈和光效。 #card

  • 光圈是指已经在景深模拟上,有了一套完整的系统。

  • 光效是指已经在人像光效上,有了很高的可用性。
    光圈

  • 手机上的人像大光圈模式已经不是什么新鲜事,而在手机上通过 改变不通的虚化程度 来模拟不通的光圈数值,也不是 iPhone 第一个做的。

  • 在专业摄影师看来 iPhone 是做的最好的。因为景深的变化并不是单纯的数值模糊,这里面有许多的衡量因素。其中,光斑的大小和形状就是显性因素。在 iPhone 的人像模式中,我们可以在功能区多出了一标志「ƒ/1.4」。 #card
    image.png

  • 这是在最近的 iOS 系统中刚刚加入,这意味着,我们可以在前期预览拍摄的时候直接选择你需要的景深效果。点击以后,滑动取景框上的数值,就可以看到不同的虚化效果。你会看到,虚化的光斑也会有着不同形状大小的变化,这非常的真实。甚至是,如果单纯只从光斑的好看程度上,iPhone 相机不输于一些昂贵的定焦镜头。#card
    image.png

  • 当然,和前面的滤镜一样。无论你是前期选择的光圈,还是后期在 相册 里调整的光圈,他们都是可以随时再进行更改的。所以,你不需要担心以后会后悔。甚至是因为有了光圈 ƒ/10 的存在,你可以让你一张人像虚化的照片就变成普通的照片。

  • 但从我自身的使用经验来看,想要最佳的效果,一般都是在 ƒ/2.8 左右,这样的画面一般都是真实的。但是需要说明的是,很多人对于相机的光圈虚化效果的认识是错误的。比如下面这一张图很多人认为这个抠图是错误的。因为画面中杯子的把手部分已经是模糊的。#card

    • 但是我们前面在对焦的部分说过了,相机上的景深是在纵向上的清晰空间。而不是平面上的物体轮廓。所以如果你使用相机,这么大光圈拍摄这里就应该是模糊的。有经验的摄影师,在这一点上一定是一眼就明白。

image.png

iPhone 人像模式虚化技巧:

  • id:: 677e7c3a-1b14-48a7-9312-d38514293449
  1. 人物和背景一定要保持一定的距离,最好是有一定的空间纵深感。#card

    • 想要很好的虚化效果,首先本身就需要人物和背景之间存在的一定距离。

    • 即使你使用上万元的昂贵定焦镜头,如果主体和背景贴在一起也没有很好的虚化。

image.png

  • id:: 677e7c4f-8800-4a76-b4f3-1fba18c8b853
  1. 学会看取景框。#card

    • 是不是足够拍摄的条件,取景框中会显示。当出现黄色对焦框的时候,就说明已经可以进行人像虚化拍摄。
  • id:: 677e7c5b-293c-40a2-b2cf-ffd0c82aa4c5
  1. iPhone XS Max 的人像模式在其他静物中使用,会有 意想不到的 效果。
  • id:: 677e7c65-2663-4be1-bc67-9da816174f97
  1. 想要好看的光斑焦外,要保证焦外本身有点状光源。 #card

    • 例如图中,背景的很多的小光点,就是光斑虚化的原因。

image.png

+ 
  • id:: 677e7c87-0c28-4fc1-9423-35bcaf98eb67
  1. iPhone XR 的人像模式在抓拍方面足够好,可以尽可能的让人物多一些动作,在捕捉精彩的瞬间。#card

    • 有意思的是 iPhone 中的光圈效果是严格模拟了对应数值的相机镜头的虚化效果,建立了一套数字化的光圈模拟系统。这是为什么 iPhone 的人像模式更加好看真实的原因。

[[iPhone XR 和iPhone XS Max 的人像模式成像原理]]


生命力和生命力的捕获

您是什么时候关注到“生命力”这一说法的?为什么决定研究生命力?

  • “生命力”是个常用的汉语词汇,以前我们经常用这个词去强调 一种生理上的能量 ,比如形容一株植物很有生命力、爬山的老人很有生命力等等,但我们一般不会这样来描述自己。后来我听到一些年轻人讲自己的生命力萎缩、崩塌、干枯……我注意到这是一个比较新的说法,而且听的人马上会被打动,说明这种说法的唤醒性很强。年轻人多次用“生命力”来表达 自己的体感 ,同时它本身描述的就是一种总体性的生存方式,这就是一个新的感知和意识。

  • 这个意识从哪里来?#card

    • 有次一个学生和我聊天说,我们学生为什么不拿工资。这让我想到,学生来学校真的是接受知识的吗?

    • 学生感到自己不是在接受知识,而是像工厂工人一样完成任务,既然做任务都得付钱,那为什么不付钱给我?学校和教育系统不是在供给知识,而是好像在吸收一个什么东西。

    • 我想这个就是生命力。学生来学校提供生命力的消耗,去生产分数、生产成绩。

  • 不只是教育系统,其他地方还存在广泛意义上的“生命力捕获”。我用生命力这样很接近体感的概念,来解释 我们的生活和对生活的意识
    生命力和生命是什么关系?

  • 生命力和生命的差别比较学术化。#card

    • 在日常生活里,生命的消失就是整个人都死了,

    • 生命力的消失就是觉得无意义、空洞、没劲,然后抑郁,甚至自杀。

  • 生命力的捕获和[[生命政治]][1]有关,但我无意在此强调它们之间的联系。#card

    • 生命政治是要描述一种统治形态,生命力则是不可以对象化的。生命力是你可以感受到的,而且只有你能感受到,外界的权力当然会影响你的生命力,但很难直接触及到你的生命力。

    • 我的出发点不是对权力变化做一个谱系的研究,我主要想讲的是个体的意识——个体意识到今天社会当中、生活当中的问题之后,要怎么办,怎样再往下想、往下探索,怎么继续往前走。所以,我说的生命力是主体的一种经验和感受,而不是从外在的制度设计的权力的角度去看。

[[通过日常生活中最典型的三个例子来理解生命力]]
什么是“间隔”?它和反思有什么区别?

  • 间隔跟反思有关,但有些反思是没有间隔的。#card

    • 其实人们一天到晚都在反思,在想领导为什么这么看、我应该怎么办之类的,在一根筋上在想这个问题,越想越复杂,就成了一个死循环。

    • 他纠结:领导让他干,他不太愿意干,但又不得不干,如果不干领导会怎么说……反复地自己揣摩、解释,这也是一种反思,但问题就在于没有间隔。

  • 间隔强调 有一个距离 ,有间隔感之后,很多时候你可能不想去反思它,而是觉得这个事就到此为止,我还有别的事要忙。这就是一种保全生命力的办法。
    生命力是怎么被捕获的?

  • 工厂捕获劳动力的方法 #card

    • 拉长劳动时间,后来有了8小时工作制就不管用了;

    • 加强劳动程度,比如流水线等等。

  • 生命力的捕获 #card

    • 包括体力,但它还包括注意力、精力、意义形成过程等方面。

    • 在互联网时代,人们生产的很多东西不是有形的,也不是明显可以计件的,不能通过时间来控制,比如一个人可能坐在办公室,其实在想别的东西。

    • 但是,我们实际看到的情况是很多人下班了还在工作,工作时间可以通过在家办公这种方式无限延长。

    • 所以生命力捕获比劳动力捕获的范围更宽,这跟现在技术条件、新的经济结构有关。

生命力的捕获跟劳动力的捕获还有个很重要的区别

  • 劳动力捕获产生 异化劳动异化 产生 批判性意识 。#card

    • 当工人被异化,他会觉得生产得越多越觉得没劲,在工厂里像行尸走肉,只有停止工作才会有战斗力。

    • 当他意识到生产出来的东西都是压迫自己的时候,就会开始有反思,就会有政治学习、集体罢工,会组织游行、组建政党。

    • 所以异化可能成为解放的开始。

  • 而生命力捕获没有这一点。#card

    • 很多年轻人也说异化,说我自己在这里就像一个机器,但意识到这些之后,他们会陷入一种很无力的感觉。
  • 这种区别跟意识和行动的间隔有关。

    • 19世纪的工人有上班下班时间的区分、有城郡附近、有家庭关系,他们的间隔可以很快填充起来。#card

      • 工人阶级的形成也跟他们住的地方有关系,比如英国的工人在酒吧里面可以讨论政治问题。

      • 他们作为人的意识,和作为一个操作简单任务的工人角色之间的间隔越来越松,间隔就成为一个政治化自我解放的空间。

    • 但在今天生命力捕获的情况下,人很难产生间隔。#card

      • 我们把自己定义为一个学生、一个白领、一个受尊重的律师,继而整个时空的安排不让我们拥有一个间隔。

      • 我们没办法跳出来,站在这个事情的外面,思考自己如何作为一个完整的人。


王树森@推荐系统

链接:GitHub - wangshusen/RecommenderSystem

2. 召回 retrieval

  • [[ItemCF]]

    • 用户最近感兴趣的物品列表

    • 找到列表中物品最相关的 topk 物品

  • [[Swing]] 给用户设置权重,解决小圈子问题

    • 重合度计算方法 #card
      image.png

    • 引入重合度计算两个物品相似度的方法 #card
      image.png

  • [[UserCF]]

    • 判断用户相似度的方法 #card

      • 多少喜欢的笔记是重合的

      • 多少关注的作者是重合的

    • 预估用户对物品兴趣的方法 #card
      image.png

  • [[Approximate Nearest Neighbor Search]]

  • [[双塔模型召回]]

  • [[Deep Retrieval]]

    • 思路 :-> 把物品表征为路径(path),线上查找 用户最匹配的路径
    • [[Deep Retrieval 和双塔召回的区别]]
  • [[地理位置召回]]

  • [[作者召回]]

  • [[缓存召回]]

  • [[曝光过滤]]

3. 排序 Rank

  • [[多目标排序模型]]

  • [[为什么需要做校准]]

  • [[MMoE]]

    • [[极化现象]]
  • [[融合公式]]

    • [[融合公式例子]]
  • [[视频播放建模]]

  • [[排序模型的特征]]

  • [[粗排]]

4. 特征交叉模型

  • [[FM]]

  • [[深度交叉网络]]

    • [[交叉层]]

    • [[Cross Network]]

  • [[DCN]]

  • [[DCNv2]]

  • [[LHUC]]

  • [[SENet]]

  • [[Bilinear-Interaction Layer]]

5. [[行为序列建模]]

  • [[DIN]]

    • [[DIN 有效原因]]
  • [[SIM]]

6. [[推荐系统中的多样性]]

  • [[Maximal Marginal Relevance]]

  • [[DPP]]

    • [[DPP:数学基础]]

7. [[物品冷启动]]

  • 优化全链路(包括召回和排序)

    • [[冷启动召回]]

    • [[Look-Alike人群扩散]]

  • [[物品冷启动:流量调控]] 解决 **流量怎么在新物品、⽼物品中分配 **

  • [[物品冷启动:AB测试]]

8. [[涨指标的方法]]

  • [[推荐系统的评价指标]]

@搜推算法常见面试问题第一期:序列建模

1 序列都有哪些组织方式,序列哪些特征是重要的?如何判断新增序列的有效性及收敛情况?如果实际序列小于最大长度,如何padding是最合理的?#card
2[[搜推算法的序列建模需要做self-attention吗?]]
3⃣️ 长序列在什么场景下提升会更大?长序列一般的建模方式有哪些?#card

  • 长序列在任何场景的提升都很大吧。。。重要资源够,

  • 长序列的方式有硬建模sim和soft的方式,

    • sim就是舍弃序列中和打分商品类目不一样的商品,缩短序列长度减少计算量,

    • soft的方式有很多fancy的论文,比如eta,cta

4⃣️ 在Attention计算的过程中,Mutli-head机制起到了什么作用,能否举例说明?#card

  • Multihead主要起到了把商品表征映射到高维空间,再在高维空间做切片(对齐语义)后根据相似度做聚合的作用

5⃣️ 序列建模在用户冷启场景下,没有用户行为有什么好的解决办法吗?#card

  • 对于大体量的工业界日志来说,用户id的embedding映射可能是多对一的,理论上可以缓解一定冷启动问题

6⃣️ 相对NLP/CV等任务通常多层Transformer的堆叠,搜推往往只有一层,为什么这么操作?#card

  • 搜推还是主要考虑打分商品和序列商品的相似性计算吧,而不是序列里商品之间的交互

7⃣️ 序列建模与GNN有什么区别?序列做宽/深分别在什么场景下收益比较大?#card

  • 序列和gnn的区别,不会,序列感觉是又宽又深最好,搜索场景宽(长)一点好吧,因为要根据query从序列里面取,长度越长,能覆盖的query越多吧

做Target Attention的时候如果KV只使用部分序列的特征有什么优劣?#card

  • target attention是q去和k match,再去乘 v的值,q和k只用部分特征会导致match的不够准吧,v只用部分特征会导致只提取序列里一部分的兴趣

9 [[序列建模可以建模联合概率吗]]?即P(target|trigger1,trigger2)#card

  • 条件概率:自回归或者上下文编码捕捉条件依赖

  • 联合概率本质是通过链式法则分解为多个条件概率的乘积

10 序列建模与传统的协同过滤在建模上的优劣分别有哪些?#card

  • 序列建模可以用在排序里,输出做dnn的输入,cf只能计算相似度,表征太单调,只能做召回

“尸体暖暖的” 代表着期待活过来

为什么我们经常听到现在的学生说生命力被压抑、被消耗,但同时年轻一代似乎又呈现出一种看起来更张扬、更自我、更清醒的面貌?

  • 生命力被剥夺不意味着 自我意识被剥夺 #card

    • 年轻人可能自我意识很强,甚至过度,但有了一个强大的自我意识之后,还是需要间隔,要梳理自己跟这个世界具体的关系是什么。

    • 年轻人感受到生命力的消耗,所以反击的时候会有一种非常绝对化的姿态,因为他觉得整个世界在压迫我,但我可以很强大、很特殊。

    • 躺平、摆烂也有激烈。如果这种判断做得比较绝对,听起来就很清晰,但它在实践中不太有效,因为他们要面对的情况是很复杂的。

    • 激烈的语言和行动(作为反击的表现),是生命力被剥夺的一个重要特征

  • 有时会听到年轻人说,整个世界都是一场骗局、让世界毁灭吧,甚至还有 “人生的分水岭是羊水”、“子宫彩票” 等等这些宣言,我觉得这都是因为他们 抽象的自我意识很强 ,接着对世界做了一个总体性、阶段性的判断。

    • 像 “子宫彩票” 这种意识本身是不成立的,出身其实没有那么大的决定权,但在实际生活中我们往往把社会想像成铁板一块,感觉到铁板在压制我们。压迫感当然是存在的,所以我们要回到生命力这样的概念,仔细地去思考 压迫感是怎么来的 ,客观上有什么原因、主观上我们是怎么去想象的。整个世界是一块大岩石,压着我这样的一粒沙子,这是一种物化的宣言,但不是真事情。
      我在网上看到一种流行又有趣的表达,年轻人遇到一个暖心的事,会评论说 “感觉尸体暖暖的”。流行词汇从“佛系” 到“躺平”再到“尸体”,似乎个体的能动性越来越低了,但这种词汇中又透露出强烈的期待。您怎么看待年轻人的用词?这是否能反映出环境和他们心理的变化?
  • **项飙:**对我来讲这是一种呼吁、一个叫喊。 #card

    • 他们呼吁别人听到他们的声音、了解他们的感受,而新的语言、新的思想能够帮助他们前行。

    • 他们之所以会把自己叫做 “尸体”,会说出“尸体暖暖的” 这句话,会把这句话写到评论里面,那显然证明他们是活着的,显然还能感受,在渴望跟别人交流,期待的是尸体还能更暖一点、更活过来。

  • 所以关键就是我们怎么样去应对这么一个呼吁和叫喊。 #card

    • 作为一个研究者,听到很多这样的叫喊,我能够在多大程度上做有效的回应?当然非常有限。

    • 但我活着的状态就是努力做出这样的回应,也许毫无效果,这没有关系

    • 现在我对生命力、间隔这些研究议题的定义就是,面对中国现在的这些叫喊,我要回应。

  • 年轻人语言的表达和变化,有时候表现了情况的进一步恶化,有时候表达了他们的批判意识更加尖锐、呼喊的声音越来越高。我觉得在网上说 “尸体暖暖的” 人,在生活中不一定很消沉,可能还蛮有生命力的,只不过他的生命力有时候会突然被碾压,会感到痛苦、抑郁,不知道怎么发扬生命力。但我觉得他那股气还在,否则不会说出这种话。 #card

    • 所以语言的激烈化,在我看来就是呼喊的声音越来越高,他们觉得一直没有得到足够的回应。

不少人注意到,当下年轻人普遍内向关注,对外的关注很少。年轻人中人格测试、算命、塔罗牌等玄学的流行与此有关吗?很多命理师、心理咨询提供了一种类似心灵按摩的服务。如果说这是一种向内关注的行为,那么有什么可以促使年轻人向外关注、拓展自己的[[横向反思空间]],同时又能安抚自己的途径?

  • **项飙:**很难去判断塔罗牌和算命是向内还是向外的。当然,它针对的是自己的感受,但是为什么有人要去算命? #card

    • **他们是要产生一个叙述,对自己的生活产生一个叙述。**他听别人来讲,等于是借用一个塔罗师、命理师,整理自己的一些经验。

    • 这个时候,他在一定意义上要把自己变成一个思考和观察的对象,所以它有一个反思的过程在里面。

    • 虽然他是要看自己,但也不是完全内在的,他要把自己跟社会联系起来,比如去整理自我跟他人、跟父母的关系,那么这里就有一个向外的倾向。

  • 为什么我们觉得(玄学)这种东西好像不太够?#card

    • 原因在于他有向外的欲望和倾向,但他缺乏向外的资料。

    • 这种资料不是读书的资料,而是缺乏向外的经验和方法,向外也看不到具体的东西。

    • 他要有经验、有方法去做积极的判断,去看外面的世界究竟是怎么样的、自己是怎样的、历史上究竟发生了什么、你住的地方和所在的学校究竟是怎么回事……

    • 要去看见附近的这些具体的事实,跟自己的生活发生关系,而不只是从书本上了解。

  • 但现在我们整体的教育方式正要压缩这部分,学生不生活在世界上,只生活在存粹的教学楼、实验室里,在一个真空的环境里。所以他对周边还有兴趣,愿意来算算命,愿意去产生一个叙述,我觉得已经很不错了。在实际生活里他们很少有机会接触外面的世界,家长都和老师都千方百计要 屏蔽外界 ,所以无法向外关注不能够怪同学。
    您在理论中使用 “附近” 和“生命力”这种直接取自生活的词汇,是为了便于理解和传播,还是认为它们本身就有理论价值? #card

  • **项飙:**两者都是。这样的词汇往往能够把更多的经验整理和调动出来,讲出更多东西、讲得更加真实,而且它们容易交流、容易得到反馈。并不是说要读的人多,对于研究社会意识和社会问题的人,可交流性本身就是工作的一部分。

  • 如果我做的东西能够回到公众当中去,然后再从公众那里回来,这本身就是一个丰富理论的过程。所以不是在理论之外还存在一个交流问题,交流的效果就是在理论之内的。一个理论的交流效果好,就说明这个它有很大的生命力、它抓住了一些东西,那它的取向就是比较精确的,它还会不断生长。如果一个理论没法交流,那它就在那里了。


下位者越希望改变,越投入生命力

以前很多人会说,这个孩子是 “读书的料”,另一个孩子不是 “读书的料”,也就是我们认为学习能力很大程度上是天赋决定。而现在,越来越多人认同精英是被制造出来的,天赋的影响其实没有这么大。在这种观念下,家长越来越重视环境和后天的培养,也更有动力在孩子的教育上密集投入。我们如何看待这种观念的改变?这种改变有利于社会平等吗?

  • 这种观念的改变在很大程度上符合社会科学研究的结果,但社会科学原本是想告诉我们,不平等很多时候是 资源分配造成的 ,而不是天生的,所以要改变 资源分配 的方式,从而提高平等。
    • 这就改变了 出生决定论 的观点,但当它变成公众意识后,就变成另外一种决定论,从强调天资的出生决定论,变成了强调 家庭和阶层的社会出身 决定论。
  • 人们把这些理论研究工具化,反过来想,既然都是资源分配形成的,那如果我这次再不赶上末班车,再不翻身的话,资源分配会把我搞得更糟,所以我一定要想尽办法,要努力在这样一个不平等的系统里面成为 受益者于是他们从韭菜变成割韭菜的人,并且想尽办法要把割韭菜的刀磨得更加锋利。
  • 所以关键就是怎么去研究社会意识。我们从字面上的叙述看到的好像是社会科学,但应该看它背后指向什么行动,也就是人们说这句话是要干什么。#card
    • 所以人们虽然在意识上觉得可以更平等,但这在客观上并没有发生,而且其中有一个很重要的变化,就是对生命力的捕获到了一个空前的高度。

    • 大家都希望用非常规的方法在不平等的体系里受益,越是下位者,越是希望改变。

    • 这里面最重要的资源投入其实就是生命力的投入,长期的注意力、体力、心理意识的投入。

    • 所以我想最大的改变可能是在这里。

人们意识到密集投入可以提高孩子的成绩,是不是陪伴式教育下沉到乡县的原因?在中西部县城,很多农村进城家庭的情况是父亲在大城市打工,母亲在县城陪读,老人在乡村务农补贴家用。这些农村宝妈有中产化的教育观念,会全阶段陪读、把孩子送进县城里的私立学校。这样做的最终目的,仅是确保自己的家庭未来能在县城扎根。农村家庭并没有期待子女进入精英阶层,但比起直接购置县城房产等投资方式,他们为什么热衷于卷教育?

  • **项飙:**很多人也会直接买房,然后获得户口,孩子可以就近在公立学校上学;也有人孤注一掷,一定要去最好的学校。#card

    • **从农村社会出来的人有时有一种报复性的要翻身的欲望,这个欲望可能比较模糊,不一定要让孩子进入精英大学,但把孩子送到私立学校这件事本身就有很强的象征意义,**这是第一。

    • 第二, 这是对孩子的一个宣告:我对你是多么的在意。

      • 当下以各种各样形式存在着对于孩子的近乎非理性的投入。在城市,这种投入看起来或许没有那么非理性,但其实平常补课、夏令营、冬令营等时间的陪伴也可以说是非理性的。
  • 这种对孩子的宣告,是这一代中国人人生意义的一种补偿方式。为什么其中有一种报复性?#card

    • 因为农村出身的一代人出来打工后,长期处于一种悬浮状态,一切生命的意义都是为了一个想象的未来。

    • 等到现在,他们好像已经没有别的东西可以视作意义来源了,唯一的意义来源就是对孩子做一种无限的投入。

  • 所以倒过来想这个问题,我们问这些农村家庭,那么多教育投入,究竟对孩子未来有什么预期?他们的未来不就是这样吗?做别的事情来达到目的不也是一样吗?#card

    • 这个问题对他们是不对的。他们做那么多投入,不是在预期一个未来,而是要对过去做一个救赎。

    • 救赎不是说自己过去有罪,而是过去存在巨大的残缺,需要通过这样一种救赎性的行动来对自己曾经高度悬浮的生活有一个交代、赋予一个意义。

    • 既然是对过去的救赎,那么他们就不太考虑未来究竟能够达到什么,有时候还会自我强迫性地就要求自己在子女教育上一定要投入到 100%。

  • 感觉这段话挺残酷的,人类学家抽出身子评价 [[2024/12/02]]

学生经常提到生命力的消耗、萎缩、坍塌…… 这种坍塌是可以通过个体的力量重建的吗?

  • 生命力是可以重建的

    • 老师在其中是一个很重要的群体,#card

      • 有很多老师对这样的教学方式也很不满意——本来当老师是希望传授知识的,不是在行为上控制学生,只为了让学生提升分数的。

      • 如果通过一些讨论、交流,改变一些老师的想法,那么他的教学方式、评价学生的方式可能就会不一样,这样就能有一个微观环境上的改变。

    • 家长是一个非常多元的群体,有很多家长也在 “吐槽”。#card

      • “吐槽” 如何从一种无力感的宣泄变成一种产生行动的机缘,我们可以一起去思考。我觉得改变的空间是存在的。
    • 还有一个我比较乐观的原因。生命力需要的是 意识上的间隔 ,这种 间隔 即使在系统没有大的改变时也是可以落实的,而且有时候只要稍微意识到这一点,就能在个体层面上看见比较大的效果。所以改变系统不是唯一的方式,在不能改变系统的情况下,我们仍有发挥能动性和创造力的办法,去创造一些小的 横向反思空间
      我们怎么去理解 “[[横向反思空间]]” 这个概念?怎么去创造这个空间?它和 “附近” 有没有共通之处?

  • 横向反思和行动空间可以认为是附近的一个具体例子。

    • 很多年轻人都在反思,但他们的反思往往不是横向的,而是顺着这个事情去想,比如去想下一步要怎么做、领导怎么想、我这么做是对的吗…… 在这个事情上反复去想,就像一种 纵向 思考。
    • 横向的意思就是 跳出这个事情,去回望它,不要被它给盖住了 。你要重新去看这个事情、看事情里的自己,去想它究竟是怎样的、为什么是这样的。
  • 反思还要加上 行动 ,要意识到你是有可做的事情的,而不仅是在那里想。比如做一些艺术,或者跟别人一起参加一些社团,把自己的间隔空间给丰富起来。

  • 最后是一个空间。我比较强调是存在状态,最重要的是这种空间让你在各个场景、各种时刻都觉得有可能去行动。#card

    • 我的 “空间” 这个词是强调这样一种可能性,你觉得自己所拥有的一种可能性——随时可以找到朋友,聊一些事情,周末有别的事情可以做,有一些沉浸式的体验能吸纳你的注意力。

    • 这跟具体做什么事情没有太大关系,但你要有这么一个空间存在。

  • 现在学校其实就是要消除这些东西,而且往往从 物理空间 开始。比如学生要住校,时间和所有的日程都要被安排,这样就让你没有机会去发展横向的反思和行动空间。
    恋爱可以看做是学生的对抗吗? #card

  • 横向反思空间

  • **项飙:**为什么学校对所谓早恋,或者说男女非正常接触,会那么警惕?其实不只是因为性保守的观念。主要是两个人恋爱之后,就会对彼此说,我喜欢你,你考试考多少分没有关系。当他们说我喜欢你,我不需要第三者的判断时,就出现了横向反思空间,两个人在一起立刻就跟系统产生了间隔

    • 然后老师再说什么,他们可能就不听了,在他们的脑子里面老师说话的分量一下子就没有了。他们会想,你骂我两句没事儿,因为过了 5 点以后我会有另外一个世界。这对系统来讲是很可怕的事。
  • 我没有倡导早恋的意思,但这是一个很生动的例子,可以用它来解释横向反思空间是什么。其实友情、邻里关系、爱好、家庭内部更平等和民主的讨论等等,都能让学生跳出考试学习怪圈,讲一点别的事情。


教育系统在批量生产炮灰

教育系统是如何捕获生命力的?

  • 捕获生命力的过程比较复杂,一个典型的例子就是招生。#card

    • 比如在北京,小升初按道理是按辖区升学,但学校会和奥赛班结合,组织点招初中,也叫密考。在广东、西安等各个地方招 “好学生”,招生就是一个捕获生命力的过程。
  • 学校为什么对招生这个环节那么关注?因为教育首先不在于教育,而在于抓人。学校把很大的精力放在能不能抓到那些理想的学生。“抓尖” 成为最重要的事,接下来怎么教是次要的。#card

    • 高三的老师告诉我,他们压力很大,因为高三学生的高考成绩会马上影响到下一轮高一招生时什么样的学生会来。如果今年高考不好,那么当年,甚至下一年、下三年的高一学生都会不行,整个学校都不好过。如果这样,高三老师会被其他老师骂,因为你没有生产出足够好的高考成绩,结果学校不能够招到足够好的学生来继续生产成绩。
  • 这从一个侧面来说明,对学校来说,抓人比教人更重要。整个教育体系主要就是 一个把人分等的机械 ,而不是一个真正的培育过程。为什么要抓人?因为他们觉得这些孩子有高质量的生命力,比如注意力更集中、更自觉。

  • 招生之后的手段就很多了,比如大家熟悉的衡水模式,就是在 时间和空间上 的绝对控制,基本把每一个流程做什么事情全部规定好。在这个过程中还有各种各样的仪式化,比如高考前拉横幅、供水果糕点之类的,给考试制造一种重大的神圣感,让学生就觉得考试就是他生命当中最重要、最严肃、最神圣的事情,不让你跟这个事之间产生间隔。

  • 对时空的掌握 是最主要的手段。
    + 在体力上通过长时间的控制 ,让学生所有的注意力全部百分百投入到现在要做的任务上,这样学生就没有别的经验,也没有机会碰到别的人、说别的事情,所以不可能产生出一种比较有效的方式来看待这一切。
    + 对于老师和家长也是如此。

    • 家庭不再是一个放松的地方,家委会、家长微信群、陪伴式教育…… 家庭成为学校的 延伸
    • 对老师的管理越来越行政化,年轻老师要不断进行评奖,所有东西都跟成绩挂钩,老师在学校里争着上课。#card
      • 我认识一个美术老师,他比较优秀,经常会出差去做一些展览,或者参加会议,所以他非常受学校其他老师的欢迎——因为他经常出差,数学、英语老师就可以来抢他的课。

      • 还有中午的自习时间,学生本来可以有半个小时用来休息,但老师会来把这半个小时也拿走,让他们继续学习。

+ 长期下来,学生连基本的休息都没有,我觉得在物理意义上就可以认为这是生命力的剥夺。通过物理意义上的生命力剥夺,最重要的目的是  **让人的意识无法与行动产生间隔 **  。
  • 学生说累,这个累其实是 “神累”。一般身体累了,你就什么不能干了。神累不一样, 累的时候你还可以继续干,甚至可以干得非常顺滑。

我们看到有很多衡水中学的学生在进入大学后失去了目标感,比起来自大城市的同学积极参加各种活动,他们像进入了旷野一样迷茫。他们是生命力被捕获的对象,但当他们反思衡中模式的时候,一些人会评论说 “衡中模式救了你”。不少人认为,这些衡中学生作为优胜者集中享受了资源,从而走到了不属于自己的大世界。由此来看,教育系统到底是生命的 “捕获者”,还是 “拯救者”?

  • **项飙:**我觉得这样的看法是有问题的。这种教育模式戕害的是 100% 的学生,因为学校要汲取 100% 学生的生命力,让所有学生进入这个体系竞争。#card

    • 在 100% 的学生里面有 1% 的学生特别成功,或者有 10% 的学生达到基本的目标,他们就会自圆其说——在这种体系下,有这 1% 的成功,所以 100% 的消耗是合理的
  • 可是这在逻辑上说不通——不搞那种模式,难道就没有清华北大了吗?如果不管怎么样都可能会有 1% 的学生进顶尖大学,那为什么一定要采取 一种消耗生命力 的方式?

  • 这种说法认为:像你这样的小地方来的人,不那么苦的话,你是进入不了这里来的;你因为是小地方的,所以你只能够这样来进入。这是一种非常常见的社会意识(“小镇做题家”),把一切现存的东西都合理化。#card

    • 首先它预设小地方跟大地方就是不一样,机会成本就是不同;

    • 第二,顶尖学校就是更好的选择;

    • 第三,在现在的安排下,人就是分等的。

    • 既然都合理,那你要在这种情况下改变命运,就是要采取这样一种自戕式的方式才能成功。学校帮助你采取自戕式的方式让你华丽转身,把你送到顶尖的位置上,所以你应该感谢它。

  • 但是这整个叙述里没有个人。#card

    • 它说小地方的人要进大城市、进顶尖学校,分层就是合理的,所以必须要采取非常规手段。

    • 但它不会问你,小地方对你意味着什么,更顶尖学校为什么就更好。

    • 也许对一些人来说,他们就想把小地方建设好;

    • 也许顶尖学校对一些人来说没有太大意义。

    • 但是在社会压力下,他们稀里糊涂地认为去了那里就好,但去了学校根本不知道去干什么,只不过是听大家说那学校好他就去了。

  • **在这种叙述下,过程对每个个人的具体含义是被忽略了的。就像把石头从 a 点搬到了 b 点,因为石头到达了另一个地方,就说明这个用力有效,但这个用力究竟怎么样碾碎了人的每一个细胞它根本不管。**这样一套社会机械学的说法把一切都合理化,听起来很朴素,但你可以看出这是物化。它把整个社会生活想象成是一个机器,你在里面要从一个螺丝钉变成另外一个螺丝钉,要咬牙切齿地使自己对机器有更大的帮助和贡献。#card

    • 而且,所谓 “拯救” 的那 1%,其实和 100% 是联系在一起的。如果没有 100% 消耗,就不可能有 1% 的特殊。陪跑、韭菜、炮灰,这些说法都是有道理。这个系统就是要生产出大批的陪跑、韭菜、炮灰,顶部的华丽光环全部要靠底层的生命力烘托出来。

还有很多人认为在整体资源匮乏的情况下,教育系统通过一种统一的标准将人筛选、分层,是一种较为高效、公平地进行资源分配的手段。

  • 所以不是教育资源的匮乏,是评价体系的单一和意义系统的匮乏。 #card

    • 中国教育从 90 年代到现在越来越卷,但从 1999 年到 2020 年,中国总高校的招生人数增加了 6 倍。衡水模式是在教育资源极度扩张的过程中出现的。

    • 所以总体的问题是质量,数量并不缺。

    • 但是如果一定要说只有北大清华是好学校,那就没办法了,认准了这个世界上只有一个东西是好的,当然就会匮乏。

  • 把人完全当作资源,去讨论怎样以一个公平的方式对人进行分类,我觉得是一种想象。#card

    • 我不知道大家在自己生活中,真的会这么去看待吗?像这种没有基本数据来支撑的说法,是一种意识形态:用一个相对抽象的方式想象,然后加以解释,背后其实有很多假设。
  • 比如假设人就是一个和资源一样的东西、分配必然要高效化,这其实是自己在做一些比较抽象的推演。

    • 为什么这种观点听起来好像很有道理呢?#card

      • 这就是[[阿伦特对意识形态]] [2] 的评论,意识形态是高度理性的。

      • 意识形态的一个特点就是逻辑化,因为意识形态是权力,它代表了权力这一方对生活的想象。

      • 这个想象忽视人的真实生活,忽视真实实践当中的复杂性,只是在大脑里面用一些比较日常的、现象层面的东西进行进行纯粹的推理。

    • 这种推理没有跟生活中的纠结、矛盾结合起来,而是按最简单最明显的逻辑进行,所以它听起来好像非常直白 :-> 人多资源少,大家肯定要竞争,只有少数人胜出。


@牛津教授项飙:教育系统正在生产大批陪跑、韭菜、炮灰,顶部的华丽光环全靠底层的生命力烘托

今年,关于学生自杀的消息越来越多,而更令我感到窒息的还有几张照片:中学教学楼的走廊,装上了密集的防盗网,让人分不清里面是学生还是囚徒。这些防盗网的作用自然不是防盗,而是防止学生跳楼。

学校处理坠楼事件的经验丰富,已经形成一套熟练的“洗地”流程和增添防护措施的办法。一些讨论围绕学生心理状况展开,却无法解释当下普遍的厌世情绪——当自杀反复发生,我们或许该发问,如果一个环境中不断有人“生病”,那么“病”的究竟是谁?“放弃生命”真的是少数学生的“个人选择”吗?

许多学生说,他们被无力感淹没,找不到生活的意义,感受到生命的枯萎……人类学家项飙注意到这些表达,并在今年提出“生命力”这一概念,指出教育系统正在大范围 “捕获生命力” ——通过上课、刷题、考试等时间和空间的安排,捕获学生的体力、长期注意力及意义赋予能力,从而生产高分。

  • 学校成为一个极端追求 绝对主义公平 的系统,根据成绩不断分班、打乱座位,既保证竞争的绝对公平,同时也阻止人与人之间的有机联系。
    这种趋势在县城及更多地方扩散,无数家庭被卷入了超级县中的拔尖活动。焦虑、抑郁从学校蔓延到家庭,成为这个时代的共同经验。被防盗网网罗和隔绝起来的学生,如同“捕获生命力”的一个哀伤隐喻。

什么是项飙所说的生命力?我很难给它下一个确切的定义。就像“附近”一样,它似乎来自于一种直观的感受。但在我的想象里,代表生命力一定不是整齐划一、拼命朝一个方向生长的速生林,而是森林的千姿百态。舒展的,柔弱的,挺阔的,散漫的,生命相互依存,自由生长,创造出属于自己的局部气候。

围绕“生命力”这个关键词,我联系到项飙,并向他提问:学生为什么普遍感到抑郁、焦虑?我们是怎样被卷入“捕获生命力”的运动的,又该如何突围?希望下面这场对话有助于激发更多讨论,促成一种或多种局部气候的产生。

[[生命力和生命力的捕获]]

[[教育系统在批量生产炮灰]]

[[下位者越希望改变,越投入生命力]]

[[“尸体暖暖的” 代表着期待活过来]]

[[橘子汽水配柠檬水在即刻上的总结]]


@世界十大哲学难题的最终解答

你会如何思考这十个哲学问题? - 知乎

[[Das@电车难题]] 是 伦理学 领域最为知名的思想实验之一
认知论 领域的一个最重要的思想实验就是:空地上的奶牛([[The Cow in the field]])
(三)定时炸弹 [[The Ticking Time Bomb]]

十个著名悖论的最终解答(四)[[爱因斯坦的光线]](Einstein’s Light Beam)
十个著名悖论的最终解答(五)[[忒修斯之船]](The Ship of Theseus)
十个著名悖论的最终解答(六)[[伽利略的重力实验]](Galieo’s Gravity
十个著名悖论的最终解答(七).[[猴子和打字机]](Monkeys and Typewriters)
十个著名悖论的最终解答(八)[[中文房间]](The Chinese Room)
十个著名悖论的最终解答(九)[[薛定锷的猫]](Schrodinger’s Cat)
10.[[缸中的大脑]](Brain in a Vat)


07 我们十几年的外语教育方法几乎全错了

我们十几年的外语教育方法几乎全错了 - 知乎 (zhihu.com)学习观07英语学习法视频演示 - 知乎 (zhihu.com)

隐式知识 implicit knowledge

  • 学习方法,通过例子学习

image.png

  • 错误的方法,

    • 看字幕练习听力

image.png

从零开始学习英语

  • 听、说、读、写,四个方面学习单词

  • 看句子想场景,不要读出来

image.png

  • 注意点

    • 不要依靠意识,思考场景

    • 以句子为单位

    • 多例子学习

    • 输出始终一致

    • 如何克服默读

      • [[chunking]] 把独立的信息组成一体,利用神经元的并行功能。

      • 通过判断阅读速度是否可以大于读出声的阅读速度

      • 边吃口香糖边阅读

[[思维导图]]

image.png


09 标题党是如何用这些招数把你当宠物诱骗的

学习观09_哔哩哔哩_bilibili

[[好奇心]] 生理模型

  • 相关的大脑区域是负责奖励机制的伏膈核,对成瘾行为起重要作用。

  • 好奇心是促进学习的奖励机制

  • 不是不喜欢学习,而是不喜欢不符合大脑特点的记忆。

好奇心的对象 - 例子(故事)

  • 无法通过记忆知识来学习知识,只能通过归纳例子来构建知识。

标题党如何通过好奇心来引诱大众

  • 例子残缺

    • 输入缺失

image.png

+ 输出缺失

image.png

  • 知识白送

    • [[分类知识]],好奇的是判断依据

image.png

+ [[回归知识]],好奇的是实现步骤

image.png

好奇心的敌人不是年龄,而是已有知识。

  • 固执心理

    • 拒绝新知识

    • 归为旧知识

  • 权威思维

    • 学生思维

[[洗脑]],利用例子构建观念模型

  • 广告植入

image.png

  • 权健帝国

image.png

思维导图

image.png


10 老师,我没有传纸条作弊,我在学习信息论

学习观10四格版:什么是信息(定性) - 知乎 (zhihu.com)

[[05 思维导图原理:人生与高手之差]]

  • 明确任务输入输出

  • 将信息压缩成知识

  • 例子重塑大脑连接

  • 拆分知识分而治之

熵与信息的定义

  • 当一件事情有多种可能情况时,这件事情对某人而言具体是哪种情况的不确定性叫做熵。

  • 能够消除该人对这件事情不确定的事情叫做信息。

  • 信息描述是一个观察者确定一个宏观态是哪个微观态时需要的物理量

熵与信息数量相等,意义相关。消除熵 = 获取信息

  • 噪音是信息获取的干扰

  • 数据是信息 + 噪音

信息的种类,本质是正确的调整每个可能情况(微观态)的概率

  • 调整概率

  • 排除干扰

  • 能够直接确定某件事情的实际情况

例子:当小明不会某道数学选择题时(正确答案是C),正确答案[[宏观态]]是 ABCD 哪个(每个可能选项叫[[微观态]])的不确定性就是熵。

  • 宏观态是不考虑内部细节的状态,而微观态是考虑具体细节的状态。

image.png

概率 VS 熵

  • 概率是某件事情(宏观态)某个可能情况(微观态)的确定性

  • 熵是某人对某件事情(宏观态)到底是哪个情况(微观态)的不确定性

  • 熵的输入是变量(宏观态)

image.png

熵与信息的性质

  • 媒介无关,同一个观察者,对同一件事情接受到的信息与用于传递信息的信号形式无关。

  • 相对观察者

    • 例子中如果观察者已知问题的答案,就不存在不确定性。观察者对这道题的熵都为 0bit

    • 如果观察者不知道答案,不确定最大,熵为 2 bits

  • 客观物理量,虽然信息是相对于观察者而言的,但信息是客观的物理量,不随观察者的主观意识改变。

    • 主观认知不会实际消除观察者对事情的不确定性
  • 相对于事件

导图

image.png


12 阻碍人类永生的原因是?

[[热力学第二定律]] 熵增定律,事物会从有序状态向无序状态发展。

  • 无序,指宏观态对应的微观态数量很多。

  • 系统自发向包含微观态最多的宏观态改变,这种改变无法自行逆转,被称为[[时间之矢]]。

  • 例子:5种宏观态,每种宏观态包含不同的微观态。对应到图中的例子,宏观态对应小球在左右区域中的数量,微观态对应具体 4 个小球的分布。

    • 计算下面 5 中宏观态对应的信息熵,左2右2的信息熵最大。

    • 微观态概率相同,宏观态由于包含的微观态数量不同,导致概率不同。

image.png

  • 热平衡,宏观态达到熵最大状态

  • 热力学熵,描述系统自发做功的能力(能量的品质)[[兰道尔原则]]

image.png

  • 热寂 heat death,宇宙发生热平衡

    • 宇宙朝着熵增的方向改变

[[麦克斯韦妖]] 尝试否定热力学第二定律

  • 一个等温系统中存在奇怪的妖怪,可以区分高速分子和低速分子,控制低速分子从左侧到右侧,高速分子从右侧到左侧。左侧分子运动快温度高,右侧分子运动越慢温度低,自发让系统的熵降低,左右两边产生能量差。

  • 不可能实现的原因,妖本质上利用信息(感知到分子运动)来降低信息熵从而降低热力学熵,需要不断从外界能量中获取信息

image.png

image.png

生命是什么?

  • 薛定谔 1943,生命以负熵为食

    • 主动利用信息来减熵,从而维持自身状态。

    • 用信息来抗衡熵增从而维持自身状态的系统可被视为生命

  • 病毒未入侵宿主细胞之前,以非生命的形式来维持自身状态,入侵之后,它又以生命的形式维持状态。

  • 人工智能生命问题的关键,计算机的信息是由人类提供,无法解决计算机如何自主获取信息。

参考资料

  • 热力学熵
    Entropy is not disorder by Khutoryansky
    Why Information is Entropy by Khutoryansky
    What is entropy? by Jeff Phillips
    热力学第二定律是什么 by 李永乐
    什么是热力学第二定律 by 柴知道

  • 信息熵
    Information entropy by Khan Academy
    Information Theory A Tutorial Introduction by Stone James [1]
    Information theory: Entropy by Zinnia Jones
    How Much Information? by Veritasium

  • [[生命是什么]]

[[思维导图]]

image.png


11 为什么信息还有单位?如何计算信息量?

质量单位,定义参照物体的质量,比较待测物体相对于参照物体的倍数。

image.png

信息量单位

image.png

  • 抛硬币正反不确定性

    • 50% 正 50% 反

    • 测得信息量的单位被称为比特 bit

    • 待测事件相当于多少参照事情,使用对数计算

      • 选择题 ABCD,相当于抛 2 次硬币

image.png

image.png

计算

  • 均匀分布 log2m\log_2 m

  • 一般分布 pilog2pi1\sum p_i \log _2 p_i^{-1}


14 地球所有生命源于同一始祖?它靠什么演化成各种高级生物的?

LUCA,Last Universal Common Ancestor

  • RNA 聚合体

为什么会转化成复杂 DNA + 蛋白质的形式演化?

  • 生命靠减熵来维持状态,代价却是不断增加环境的总熵。

  • 生命演化的方向是不断增大智能,增强个体能力,将若干个个体组织成一个新个体。

  • 大量蛋白质有组织并行工作就有了质变(相变,phase transition)

[[涌现能力]] emergence,由量变引起质变的现象

  • 跃进式增强智能

  • 只有稳定的智能体之间有规则的相互作用才能形成更高层级的智能体

反馈循环

  • 蓝绿菌,演化出光合作用 photosynthesis

  • 正反馈

    • 大氧化事件 Great Oxygenation Event,由于蓝绿菌的数量爆炸式增长,地球大气氧含量迅速增加。额外的氧气不断消耗给地球保温的甲烷,进入休伦冰期。地球上的生命近乎全部灭绝。

    • 一个物种的个体可以永生,一旦演化出某个优势模型时,无限加速繁殖的个体会让环境也加速熵增,该物种反而会因为演化的减熵速度无法跟进环境的熵增速度而灭绝。

  • 负反馈

    • 某些好氧菌被大细菌整体吞噬后,形成内共生关系 endosymbiotic,变为了专门提供能量的线粒体。 而蓝绿菌被大细胞吞噬后变成了叶绿体。这些大细胞又慢慢演化成了真核细胞。

寒武纪生命大爆发 Cambrian Explosion

  • 生命短时期内迅速演化

  • 达尔文主张的演化是渐进式的

  • 寒武纪爆发的关键,从减熵的角度来看,维持生命的关键并非演化本身,而是演化所提供的信息。

    • 整体稳定困境

      • 随机突变的单细胞无法达到涌现成复杂多细胞生物所需的稳定性。

      • 有性生殖,将多细胞生物作为整体来增加差异性的机制。在稳定整体的基础上增加差异性。

    • 移动信息困境

      • 不能大范围移动的多细胞生物只能和相近的个体交配,会无法提供足够的差异性导致演化速率过低而灭绝。

      • 多细胞生物大范围移动后,环境也会随着移动而改变,又会因之前演化出模型无法预测新环境的信息而死亡。

神经细胞,埃迪卡拉纪中演化出来

  • 众多神经细胞形成的神经网 nerve net 配合演化机制 neuro-evolution 加快学习环境模型的速率。

  • 增加实时感官能力的神经网络允许个体在新环境中,学习用上一时刻信息来预测下一时刻信息的模型。

神经网络,第二种学习系统

image.png

LUCA原型、RNA世界、大氧化事件、雪球地球、寒武爆发、有性生殖、神经网、生物大灭绝、复杂系统、生物反馈循环

[[思维导图]]

image.png


13 若想造出人工智能生命,至少需要满足这五个条件

拥有所有信息便可永恒。

从一种事件的信息获得所需事件的信息

例子(样本),从输入信息到输出信息的对应变化

知识(函数、模型、映射、变换),压缩两个事件之间所有信息对应变化。

  • 知识不是信息

  • 知识需可重复利用

智能:学习知识和使用知识的能力

  • 根据改变做出对应改变的能力

产生智能体的 5 个能力

  • 学习

    • DNA 是如何学习到的

    • 演化(genetic algorithm),智能体让自己的突变克隆体去问环境,突变所产生的模型是否能预测信息,以克隆体的死亡为代价获得能稳定减熵的模型的一种学习方法。

      • 生命史第一个学习方法。智能体不以个体学习知识,而以群体学习知识。

        • 数据准备

          • 系统猜对信息就会存活,否则无法维持状态,间接提供信息
        • 模型候选

          • DNA 遗传过程中产生基因突变,每个克隆体都有不同的模型
        • 模型筛选

          • 只有合适的模型才能够预测到信息

          • 自然选择判断模型所预测的信息是否能够维持自身状态,淘汰无法预测到信息的模型。

          • 反复进行候选和筛选后,种群基因库会整体形成一个能稳定减熵的模型

  • 存储

    • [[DNA]]

      • dna 编码冗余使得遗传代码具备极强的抗噪能力,把点突变 point mutation 带来的灾难降到最低

      • 存储内容不是单纯的信息而是代码,会被编译成能实现模型功能的工具。

  • 预测

    • 碱基 A、C、G、T,每 3 个碱基对应一个氨基酸。氨基酸形成不同功能的蛋白质。

    • 蛋白质实现不同的功能

  • 获能

    • 太阳能是能量来源

    • 海底热泉,海底沉积物的化能合成

  • 熵差

    • 自然选择液体中的固体,自身的固体相对稳定,液体又支持熵减系统的形成

image.png

人类为什么会死亡?

  • 自然死亡被有意写到了基因代码中

  • 信息的获取受到某种限制

[[思维导图]]

image.png


15.6 如何背台词

直接背诵文稿不符合大脑记忆的特点,通过引入其他稳定输入,减少背演讲内容的负担。

通过文稿练习演讲

image.png

通过稳定的输入练习演讲

image.png

image.png


15.5 遗忘是为了更好的学习

[[异或问题]]

  • [[查找记忆]],将信息作为状态,存储到不同的地址中的记忆方式

  • [[网络记忆]],本质是寻找所有情况的共同规律。

    • 网络记忆位置,由所有连接共同存储

英语学习

  • 无法通过查找记忆枚举所有的情况

image.png

  • 练习听力不要使用字幕

学习中的遗忘

  • 寻找共同规律(学习)过程中由于调整权重所造成的连接断开

学习后的遗忘

  • 为了提高泛化能力,根据连接被使用的频率强化或弱化连接的一种模型筛选机制。

15 为什么人类没有演化成过目不忘?

针对这个问题的假说

  • 消退说,遗忘是信息在脑中不可避免的消退结果

    • 超忆症人群可以过目不忘,演化过程中生命完全有条件产生没有消退也没有干扰的大脑
  • 干扰说,混淆是不同信息干扰记忆所造成的

为什么会主动遗忘?

生命稳态维持

  • 生命是一种特殊的状态维持方式,能被留下来的原因只有一个:通过预测信息,在不断变化的环境中维持了自身的状态。

  • 单细胞生物可以单靠应激反应达到在环境中维持生命稳态

移动演化危机

  • 多细胞生物演化面临的问题

    • 生物由大量细胞组成,如果这些细胞随时可以变异,那就无法形成一个稳定的整体。
  • 有性生殖允许个体在保证稳定性的基础上增加差异性,条件是需要充分移动来洗牌。

  • 演化的学习速度跟不上移动所造成环境变化速度。

高等生命的挑战

  • 生物所看到的事物会随着自身的模型而改变,所以人类看到的也并不是世界的真实样貌。

  • 模型泛化能力

    • 高考,从有限的练习题中构建可以解出从未见过的高考题的模型,每个模型就是考生需要学习的一个知识。
  • 自然选择无法干预生命周期内的学习

  • 记忆的作用,允许生物从历史经验中学习

网络记忆学习

  • 针对异或问题,两种不同策略,查找记忆或网络记忆

    • 在网络中,记忆是过拟合的学习,学习是泛化的记忆。

image.png

  • [[通用近似定理]] Universalapproximation theorem

    • 保证网络可以记忆,但不保证网络一定可以学习。
  • 网络记忆的特点

    • 记忆耗时

    • 会有干扰

      • 网络的调整会影响之间的记忆
    • 会有混淆

      • 模糊记忆,混淆两个相似的情况
    • 记忆可稳定

  • 网络记忆寻找共同规律,能对未知进行预测

    • 查找记忆不能解决未知的情况
  • 遗忘:基于概率的模型筛选机制

    • 规律出现频率低,该规律是普遍规律的概率就很低,学到这个规律的个体很难存活。

    • 当网络的某个连接被高频率使用时,就强化该连接的形成。(需要不断重复记忆)

    • 当网络的某个连接被低频率使用,就弱化该连接的形成。(记住的信息会被遗忘)

    • 又有该机制的个体在残酷的自然选择中存活下来,后续繁衍成为我们的祖先。


15.7 ​昨夜想到个绝妙点子,想明天试下,结果。。猜到了吗?

演讲的流程

  • step1. 看自己的稿子的一句话或一段话,记住意思。

  • step2. 看ppt的图片(台下的坐席,灯光等),直接讲出刚才记住的意思。

  • 重复上述过程直到记住所有演讲内容

演讲的流程遵循,循环神经网络。

image.png

昨天想到的点子,第二天忘记的解释

  • 产生这种现象的原因

    • 相同模型,不同输入

      • 验证例子

        • 一步一步回忆,直到找到自己需要的
    • 相同输入,不同模型


16 性与杀戮改变了所有生物的轨迹?六亿年前到底发生了什么?

生命的目的是不惜一切代价地永远生存,想要生存需要预测信息,预测信息就需要学习模型。

  • 个体死亡是种群为了学习模型所付出的代价。

遗忘是允许生命可以不再以个体的死亡为代价来学习的关键,起到筛选模型的作用。

无聊的十亿年,真核细胞演化停滞,细胞间的涌现出现条件苛刻

  • 涌现条件苛刻,想要通过涌现成新的学习系统,细胞之间不仅要形成稳定的连接,还要有统一的信息交流语言。

阿瓦隆爆发

  • 埃迪卡拉纪

  • 狄更逊水母(Dickinsonia)被动接收养分

神经元,通过调整频率发送不同的信息

  • 物理连接

    • 轴突 axon,

    • 树突 dendrites,连接其他神经细胞的胞体或树突

    • 胶质细胞,支撑和隔离神经细胞并提供养分

image.png

image.png

  • 不同神经细胞通过电脉冲的频率交流

  • 脉冲发送

    • 极化 polarization,神经细胞处于初始状态的过程

      • 钠钾离子泵(Sodium–potassium pumps)的蛋白质消耗 ATP 控制纳离子和钾离子进出使膜电位平衡
    • 去极化 depolarization,膜电位升到 -55mV

      • 电压门控钠离子通道(Voltage-gated sodium channels)的蛋白质,膜电位在 -55mv 时开门,允许纳离子涌入使膜电位升到 +40mV,带动其他部位连锁的去极化,形成动作电位,一直传导到突触
    • 再极化 Repolarization,重新调整膜电位到 -70 mV

      • 电压门控钾离子通道(Voltage-gated potassium Ion channels)的蛋白质

      • +40mV 左右,允许钾离子通过,膜电位调整到 -70 mV

image.png

  • 频率调整

    • 突触囊泡,动作电位传导到轴突末梢时,该囊泡会穿过细胞膜,释放神经递质。

    • 接收信息的神经细胞的细胞膜上有很多不同的受体,在与特定的神经递质结合时会开门,允许离子通过。

      • 激发,增高膜电位

      • 抑制,降低膜电位

image.png

神经网,通过神经细胞实现任何功能

  • 感知系统

    • 通过感知信报将环境的物理信息转化成电脉冲频率,形成感知外界环境的多维系统
  • 运动系统

    • 超智能体:动物,多个神经系统协作
  • 感知运动

    • 生命首次拥有实时感觉环境并立刻做出运动反应的能力
  • 有性生殖

    • 感知运动能力使不同个体可以充分洗牌后交配,不必担心近亲交配导致备选模型差异性不足
  • 捕食者,增加筛选压力

    • 协同演化,正反馈循环,捕食者和被捕食者相互筛选
  • 涌现依赖交流

  • 河豚毒素干扰神经系统

寒武纪大爆发

  • 条件

image.png

神经网学习

  • 突触可塑性 Synaptic plasticity,生命周期内学习

    • 突触上的受体不再固定不变,可以根据经验自动调节

      • 长期增强作用,增多受体数量,加快接收神经递质的速度

      • 长期抑制作用,减少受体数量,。。。。

  • 个体学习,总结经验,找出规律

    • 例子准备,增强个体记忆

    • 泛化能力

    • 学习

      • 重复,强化连接

      • 遗忘,弱化连接

  • 正确[[学习]]

  • 表征 Representation

    • 要学习的对象可能有多个不通的形态,通过表征进行泛化
  • 人工神经网络

    • 相互对应

      • 「细胞群频率」对应着「向量的数值」

      • 「激活的条件」对应着「非线性函数」

      • 「可变频突触」对应着「网络的权重」

    • 人工遗忘,dropout 等遗忘机制

    • 不同点

      • 反向传播

思维导图

image.png

image.png


17.5 是什么要素让一个科幻变成赛博朋克的?

剧本的魅力

  • 著名编剧艾伦·索金说过:剧本必须由欲望阻碍构成,某人想要达成某个目标,过程中遇到了阻碍,最终与阻碍做个了断。若没有这些要素,就不构成一个剧本,而是新闻。

  • 对人类而言,后续演化出的一个非常关键的能力就是:从他人经验中学习的能力,而剧本必须具备的要素恰好也是一个有效的他人经验所具备的要素。因此从演化的视角来看,人们喜欢看电影的一个原因是:电影能允许人们从他人的经验中学习,构建有利于生存的认知模型。

  • 看电影有构建知识的感觉 [[欲望]]

朋克,非主流、叛逆,描述个体在这种难以适应的未来世界中所产生的心态

  • 朋克文学,就是虚构一个在某项技术达到顶峰时的未来世界,并展现个体在这种环境中的生存。

    • 朋克文学特点

      • 个体冲突世界

        • 这类故事中反正就是世界本身,世界是由所有人共有的欲望所构建的。
      • 未来可能发生

        • 读者自己在未来真有可能面对这种局面
      • 认知停留过去

        • 世界中的人还停留在当时的认知
      • 认知时空冲突

        • 固定认知,快进世界。认知没有随着环境变化而改变,从而个体与世界之间引入巨大的冲突
  • [[赛博]]朋克

    • 控制论(人类自己由什么构成,大脑是如何工作)技术达到巅峰,意味着,创造生命、人机结合、替换身体、入侵大脑、复制意识都可以实现。

    • 开始思考倘若自己真的处在这种非常先进却又极度危险的世界中,究竟该如何生存。

    • 生存危机和存在悖论

      • [[宿命决定]]

      • [[缸中之脑]]

      • [[忒修斯之船]]

[[思维导图]]

image.png


18.5 素质教育为何十年都没改革成?

知识争论

  • 知识无用论

    • 应试知识无用,感觉时间白费。

    • 但是为升学,时间并没有浪费。

    • 在学校构建的模型无法解决实际问题

  • 知识有用论

    • 使用知识有用,后悔没好好学。

    • 即使好好学,也较难学到实用。

聪明的汉斯,最大化目标但是学偏了模型

image.png

机器的汉斯效应,看似能完成一些任务,其实实在依赖所找到的某些微妙特征

  • 识别飞机与坦克的模型,学习到背景是否是蓝色

image.png

人类教育的启示

  • 升学生最大化分数得到应试模型,但这不是教育目标的模型

    • 辅导书和课本的目标不同,导致现在既要用课本也要用辅导书

image.png

  • 教育系统与就业系统不匹配

    • 最大化分数模型不一定是教育目标模型

    • 企业通过分数和学校出身来筛选,有希望筛选的人才可以解决工作中的实际问题。筛选方式和筛选目标并不匹配

image.png

偏差消除

  • 素质教育改革结果,升学的背景下所有模型最终会变成最大升学的模型

    • 能否改变奖励机制,使“能最大化奖励的模型”就等于“教育目标的模型”,或者说让“得分目标”完全等价于“能力目标”。

image.png

  • 如何教育改革

    • 推行素质教育后,奖励机制依然不能使得分目标等价于能力目标,系统也会根据素质教育的奖励机制演化成另一套偏离教育目标的应试体系。

      • 这套系统会使学生获得分数的成本变高,让人才筛选变得不再公平。
    • 美国招生

  • 妥协的结果,降低学生得分成本的应试教育,解决人才选拔公平问题

image.png

  • 实际解决方案

    • 升学机会,义务教育阶段

      • 系统起到筛选作用,允许最大化得分的行为模式
    • 实用目的,高等教育阶段

      • 学生自己通过明确输入输出,抑制建模偏差

[[思维导图]]

image.png


19 被现代隐形人猎杀,你能活下来吗?

感知

  • 感觉细胞将物理信号转化成对应频率的电脉冲,神经细胞处理接收到电脉冲。

  • 缺陷

    • 部分场景下,无法感知所需要的模态输入

    • 模型依赖,感知细胞受损会失去响应的感知

    • 感知欺骗

模态

  • 承载信息的信号形式

  • 每种感知对应一种模态

  • 每种模态都有它的局限

多模态融合

  • 克服单模态感觉缺陷

  • 不同模态对同一时间的预测可能彼此冲突

  • 听力多模态

    • 人类对别人说了什么的猜测取决于视觉模态和听觉模态融合
  • 大脑融合机制

    • 当多个模态的信息同步时,大脑就会吸引注意力,并重塑对现实猜测

只要你没有感知敌人的模型,敌人就不存在于你的现实。

[[思维导图]]

image.png


1D Conv

1D 卷积其实是特殊的 2D 卷积,卷积核宽度直接和 embedding 维度强制对应。只能在时间顺序上纵向滑动,不能横向滑动。

控制前后卷积的通道数,用于 skip connect 需要 add 操作的场景

应用非线性

  • 神经网络每一层后,都可以应用激活层。

  • 非线性扩展模型的可能性,通常使深度网络比宽网络更好

  • 为了增加非线性层数量而不显著增加参数和计算量,可以用 1D 卷积然后再接激活层。

Ref


2022week02

[[KG笔记法]] 挺复杂,暂时不参考

Mac 如何远程访问 Windows?

周报|22W02 - 追求简洁而非复杂 - Ztleespace

  • Minerva 以周报形式回顾每周项目、学习和阅读情况。

    • 日文,使用翻译
  • [[Architectural Decision Records]]

[[PID]]


2022week40

[[@OneNote 嵌套表格]]

[[睡前消息]] 490

  • 三元素模型

    • 通过「真善美」三个元素的权重,给文化产品分类

      • 宗教:善>美>真

      • 戏曲:美>善>真

      • 媒体:真>善和美

如何一键打开 macOS 中的任何文件(以 Keyboard Maestro 为例) - #Untag (utgd.net)

  • 在指定目录生成文件的 alias,复制 alias 对应的路径给其他软件使用。

用 Keyboard Maestro 为 PDF Expert 打造个性化批注工具箱 - #Untag (utgd.net)

  • 参考高亮颜色 [[Highlight Taxonomy]]

PKM 又一年,我的困惑与心得 - 少数派 (sspai.com)

  • 教育目标理论,人类对于知识的认知层次

    • 记忆:对具体事实、概念、术语的回忆;

    • 理解:能够对知识进行转换、解释和推断;

    • 应用:在实际情景中运用知识;

    • 分析:将所学材料分解,明白各部分间的联系;

    • 评价:基于对知识的理解,对知识的价值进行有效判断;

    • 创造:将组成知识的各部分要素重新加工,产生新的模式或结构;

  • daily note 模板

    • 我今天做了什么

    • 我今天发现了什么

    • 我今天在想什么

广告算法工程师的核心竞争力是什么? - 知乎 (zhihu.com)

  • 业务理解

  • 不如读书的方法论

    • 问题是什么?

    • 用什么指标来度量?

    • 问题的复杂度是什么量级?

    • 模型不好 本质上是模型复杂度没有匹配问题复杂度 哪里是模型复杂度的瓶颈?

    • 找不到便利的数据和特征 就可以想想是否能把问题分解成子问题 也许在子问题空间下 你能想到更好的特征 数据和模型 同时分解了问题 就能够引入更多的人员来并行工作

    • 知道怎么做干净的实验 系统性的探索所有的可能性 排除无关因素


2022week42

[[CITIZEN]]

Bilibili 干净链接 (greasyfork.org) 去除b站地址栏的小尾巴 [[Tampermonkey/Plugin]]

论文协作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{{< logseq/orgQUERY >}}; 新建一个query查询
; ?b: block
; ?p: page
{
:title "文献query-原型机"
:query

; 检出符合条件?b的全部属性,最终体现为一个query-table
[:find (pull ?b [*])

; 检索规则与范围
:where


; /--- 检出属性publication-title值为ACS CATALYSIS的page ---/
; publication-title:: ACS CATALYSIS

; 检出所有page (展开点说,page是一种特殊的block,而page级的block才会有:block/name属性)
[?p :block/name]
; 取page的page-properties
[?p :block/properties ?prop]
; 取page-properties中“publication-title:: value1, value1, value3”的值
; 即: 取出列表“value1, value1, value3”
[(get ?prop :publication-title) ?v]
; 判断ACS CATALYSIS(作为一个整体)是否存在于“value1, value1, value3”中
(or [(= ?v "ACS CATALYSIS")] [(contains? ?v "ACS CATALYSIS")])

; /--- 检出 "fig" AND "o1" AND ("TEM" OR "equil") NOT "EDX"---/

; 取符合上述规则page下的block
[?b :block/page ?p]
; 检出链接"fig"的block //切片载体类型
[?b :block/path-refs [:block/name "fig"]]
; 检出链接"o1"的block //图序
[?b :block/path-refs [:block/name "o1"]]
; 检出链接"intro"的block //功能区段
;[?b :block/path-refs [:block/name "intro"]]
; 检出链接"TEM"或"equil"的block
; 注意!数据库检索必须要小写!
(or [?b :block/path-refs [:block/name "tem"]]
[?b :block/path-refs [:block/name "equil"]])
; 去除链接"EDX"的block
(not [?b :block/path-refs [:block/name "edx"]])
]
}
{{< / logseq/orgQUERY >}}

TODO i0Ek3/work-and-life-in-system: 程序员在体制内的工作和生活是怎样的? (github.com)

  • 单位的事情,让我明白没有技术的可怕之处以及沦为庸人的痛楚。

从0到1构建你的知识图谱 | 工作流 Logseq Pro S1E1

  • 标签

    • 灵感 记录自己的想法

    • Q 读文献的疑问

  • 文字居中 [[logseq/tips]]

    • 输入 < 选择 Center,自动生成 #+BEGIN_CENTER 需要居中的文字 #+END_CENTER
  • 使用 [[logseq-plugin-agenda]] 任务管理

    • 实时查询当前已经安排的 task {{renderer agenda, task-list}}

Logseq 相关

  • [[logseq-publish]] 增加备案号

    • 修改 index.html 以注入自定义功能

      • 获取对象 main-content-container,然后增加一个新的 div 对象,其中包含需要的一个备案号链接

        • 需要设置 div 的 width,否则对象位置会有问题
1
2
3
4
5
6
7
8
9
<script>
var container = document.getElementById('main-content-container');
container.style['flex-wrap'] = 'wrap';
container.firstChild.style['flex-basis'] = '100%';
var element = document.createElement('div');
element.style['width']='100%';
element.innerHTML = '<center><a href="https://beian.miit.gov.cn" rel="noopener" target="_blank">浙ICP备17004638号-1 </a></center>';
container.appendChild(element);
</script>
  + 使用 [\[\[sed\]\]](/post/logseq/sed.html) 修改生成的 `index.html` 在 `/<body>` 标签前插入上一步脚本

    + `sed -i "s@</body>@$( cat logseq/inject.html | tr '\n' ' ' | sed 's@&@\\&@g' )</body>@"  www/index.html`

      + 使用 `@` 做为 sed 的替换操作分隔符

      + 替换字符串中包含 `/` 报错 `sed: -e expression #1, char 20: unknown option to `s`

+ [配置 Logseq 自动发布相关流程 (abosen.top)](https://logseq.abosen.top/#/page/%E9%85%8D%E7%BD%AE%20logseq%20%E8%87%AA%E5%8A%A8%E5%8F%91%E5%B8%83%E7%9B%B8%E5%85%B3%E6%B5%81%E7%A8%8B) 增加评论系统

+ [How can I create and style a div using JavaScript? - Stack Overflow](https://stackoverflow.com/questions/6840326/how-can-i-create-and-style-a-div-using-javascript)

DONE [[机器学习知识体系汇总]]


2022week41

Transformer 一篇就够了(四): 细思极恐的 Transformer - 知乎 (zhihu.com)

[[MacOS]] 随航,显示器设置中选择 ipad

  • ipad 上无法进行触屏操作,但是使用 apple pencil 会出现光标

双链使用经验分享:PPIP< 时间 - 事件 > 笔记模型 - 链滴 (ld246.com) [[dammy]]

  • [[自我导向行为]]

    • 这本书基于一个很简行为控制模型,即一个行为的发生包含着“前提-行为-后果”这样一个事件链条,改变这个链条上的任何一点,就有可能改变这个行为。甚至对这个链条的观察本身,也可以改变行为。

    • 系统的自我观察技巧——记录日志

      • 管理任务,自我反思,发现问题,提升自己
    • TODO 和 [[福格行为模型]] 的区别?

  • 严格区分文档和 block 没意义

    • [[思源笔记]] “逻辑上用户完全可以不关心物理文件存放路径,只用关心内容块的组织方式”
  • 利用块引用拆解材料

    • 对材料中内容注释,可以替代之前在内容下面创建 block

    • 可以将内容引用到 daily note 中

    • dammy 的例子

      • 思源里有原材料

      • 利用 alt+ 拖拽块引用原材料到 daily notes 里

      • 右键锚文本弹出选项——转换为“文本 * ”

      • 开始对原材料进行解读改写

  • 时间-事件 笔记模型

    • daily note 中使用块引用(双链、标签)等方法记录事件进度

    • 事件页面通过反链面板观察事件在不同天的进展

    • 通过query或者 moc 汇总一个事件关键进展

Roam 创新点 #idea

  • 设计了一种新的信息展现形式

[[Tampermonkey]] 减少更新打扰

  • 配置模式改成高级

  • 脚本更新

    • 简单脚本更新不必询问我

    • 检查间隔

  • 脚本对应设置中,取消检查更新

[[Obsidian]]

  • slash commands 斜杠命令

  • Command Palette 命令面板


2363. 合并相似的物品

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
vector<vector<int>> mergeSimilarItems(vector<vector<int>>& items1, vector<vector<int>>& items2) {
map<int, int>a;
for(auto item:items1) {
a[item[0]] = item[1];
}
for(auto item:items2) {
if (a.find(item[0]) == a.end()) {
a[item[0]] = 0;
}
a[item[0]] += item[1];
}
vector<vector<int>> ans;
for(auto aa=a.begin();aa!=a.end();aa++) {
ans.push_back(vector{aa->first, aa->second});
}
return ans;
}
};

@2010年的房地产调控,我们收获了什么?写在房价暴涨前

[[@天涯kk的房产预言到尾声了吗?2022年以后还会重复2015的普遍暴涨吗? - 知乎]]

待分类

  • [[中国的学术]]

  • [[一线、二线的生活]]

  • [[智慧和才干]]

调控

  • [[调控的好处是让政府利益最大化&防范金融风险]]

  • [[调控的真正目的:防范金融风险 & 通过垄断实现国家利益最大化]]

  • [[调控带来的影响]]

  • [[10年的调控和08年调控的区别、带来的影响、机会]]

  • [[中国的房地产不可能软着陆]]

政府

  • [[为人民服务是说给人民听的]]

  • [[政府搬迁]]

  • [[官方公布的统计数据,只要关系到某个群体的利益,就一定会被修饰导致失真]]

经济

  • [[守着金碗要饭吃]] [[游乐园比喻]]

  • [[为什么美国人工高于中国,但大多数商品的物价却低于中国]]

  • [[人民币对外升值,对内贬值]]

  • [[中国可以无限印钞吗]]

  • [[富人越富、穷人越穷]]

  • [[税收从来都是向下游转嫁的 & 房产税迟迟不出台的真正原因]]

  • [[存钱不如存资产,钱会贬值,资产会升值]]

  • [[不同阶层的人对收入高低有不同的理解]]

  • [[通货膨胀的形成原因]]

  • [[经济崩溃,最后接盘的是老百姓]]

政策

  • [[粮食和房子的不同是,房子无法和土地剥离]]

    • [[农产品的价格关系到影响稳定的吃饭问题]]
  • [[什么是好的政策]]

  • [[外汇管制]]

    • [[外汇管制决定了大部分有钱人只能在国内投资]]
  • [[货币为什么要贬值]]

  • [[房地产是资本市场还是实体经济?]]

  • [[关于拆迁]]

    • [[拆迁补偿]]

体制内外

  • [[双轨制之体制内的福利]]

  • [[底层指的是体制外底薪白领]]

  • [[收入分配改革跟体制外的人没关系]]

  • [[体制外的人要早早考虑养老问题]]

  • [[中国民主]]

  • [[垄断企业]]

租房

  • [[租房的苦]]

  • [[房租价格涨不上去,本质是买房还看起来有希望]]

买房

  • 要不要买房

    • [[什么是真买不起房]] 傻空

    • [[什么是傻空]]

    • [[40年的商住房没有70年的住宅有投资价值]]

    • [[房地产的现状]]

    • [[房奴算不上不幸,相当当不了才算]]

    • [[还能上车的赶紧上车]]

    • [[人需要一个安身之所,能买早买比晚买好]]

    • [[金融杠杆是炒房赚钱的放大器]]

    • [[地级市买房:投资风险要大于一线城市和省会城市]]

  • 房价

    • [[决定房价的因素有很多,具体情况具体分析]]

    • [[土地不稀缺,优质土地稀缺]]

    • [[二三线城市的发展靠拆迁]]

    • [[为什么现在租售比这么低]]

    • [[房价会出现很多上下波动]]

  • 买什么

    • [[投资最重要的是稀缺性,买房首选公务员小区]]

      • [[把房买在政府边,差不了]]
    • [[投资新房还是老公房]]

    • [[关于购买经济适用房]]

    • [[同小区买一套大还是两套小]]

    • [[大城市对近距离的小城市有虹吸效应]]

    • [[公园地产是稀缺资源]]

    • [[房屋朝向只要不是纯北西就行 & 买房首选市中心、公园地产]]

    • [[分期付款买房,如果房价上涨,很容易毁约 & 自住要选大品牌开发商]]

    • [[购买房价基数低的省会城市,怎么都不会亏的]]

  • [[房地产游戏的模式三个环节]]

  • [[政府限制政策房的利润,那kfs就一定会偷工减料]]

  • 分区域

    • [[北京回龙观:有上涨空间]]

      • [[北京老式砖混板楼的最终命运?]]

      • [[北京三环塔楼]]

      • [[西五环内的别墅,是相当稀缺的资源]]

      • [[北京华清嘉园]]

      • [[北京大兴]]

      • [[3万入手北京四环,你也是幸运的]]

    • [[重庆:高层和别墅怎么选?]]

    • [[河南郑州与洛阳]]

    • [[济南 & 大规律拆迁的城市房价不会下降]]

    • [[桂林 vs 南宁]]

    • [[南宁买房建议]]

    • [[常德:小城市房价会因为人民币贬值涨价,但依然难变现]]

    • [[武汉:城市发展空间的大小,往往和房价的升值空间成正比]]

    • [[昆山房价分析与买房]]

    • [[杭州:富人的天堂]]

    • [[福州:年轻人要早买房]]

    • [[贵阳,资源的稀缺导致权贵更容易垄断,通过低收入高物价的方式剥削底层群体]]

股市

  • [[通过股指期数看沪深 300 指数趋势]]

历史

  • 历史上的买房

    • [[历史上买房最好的朝代]]

    • [[宋代房奴]]

      • [[kkndme聊北宋、唐朝]]
  • 人物

    • [[“奸臣”贾似道]]

    • [[奸臣蔡京]]

    • [[毛泽东往事]]

    • [[李商隐「渣男」祖师爷]]

  • [[上层阶级的盛世]]

  • [[kkndme 推荐的历史书]]

  • [[农民政权的缺点]]

  • [[中国的朝代更替]]

    • [[经济问题是导致清朝灭亡]]

    • [[货币供应不足是明朝的真正原因]]

  • [[具体情况具体分析,如果看不懂,一定是没有抓住问题本质]]

  • [[历史总是惊人的相似]]

  • [[历史的结局]]

— 没有整理

id:: 67013d96-689d-4b56-86c3-66c648086519

[[关于垄断]]

[[民生问题]]

[[房产税的制定原则]]

[[维稳的本质是人民能吃饱饭]]

[[公租房是为体制内服务的]]

[[房产税一定会转嫁给租房人]]

[[巨大的税收消耗也决定了GDP必须快速增长 & 公务员越精减越多]]

[[体制内的住房问题有国家保驾护航]]

[[依靠但又不能完全依靠开发商建公租房]]

[[解决体制外的住房问题:国家垄断,细水长流收租]]

[[普通人买得起「优质商品房」就尽早买把]]

[[商品房和公租房的区别]]

[[提议通过征普税调节贫富差距,不是傻,就是坏]]

[[调控带来的影响]]

[[农产品的价格关系到影响稳定的吃饭问题]]

[[农产品价格的抬头会导致物价全面上涨,但国家不会坐视不管且有能力管]]

[[资金会在优质资产之间流动,而决定优质资产价格的是精英阶层的购买力]]

[[资金流向规律决定了农产品和资产价格总有一个要涨,人为压制,一定会按下葫芦浮起瓢]]

[[资金流向规律决定了洼地不会一直是洼地]]

[[决定房价的因素有很多,具体情况具体分析]]

[[房价暴涨是相对于钱而言的,不是相对于实际购买力而言的]]

[[土地不稀缺,优质土地稀缺]]

[[集中发展大城市是导致优质土地稀缺的原因]]

[[为人民服务是说给人民听的]]

[[历史是一面镜子,不同的国情决定了采取同样的政策结果可能是南辕北辙]]

[[屁股决定脑袋,人民不知厉害关系选房子,政府选农产品]]

[[各个阶层的住房问题都安排的妥妥的]]

[[顶层的岁月静好来自于底层的负重前行]]

[[底层指的是体制外底薪白领]]

[[资金终会流向具有稀缺性的资产]]

[[土地的稀缺决定了大多数人永远买不起想买的房子]]

[[一二线买房只会越来越难,最终租房会成为主流]]

[[如果房价不涨,那其他产品会怎么涨]]

[[政府如何利用公租房控制租房市场]]

[[城中村不会长期存在]]

[[三四线城市的未来]]

[[稀缺房的价格永远涨]]

[[房地产是资本市场还是实体经济?]]

[[公租房的量级不会冲击到商品房市场]]

[[权利让革族成为苗族的一支]]

[[房价是否会跌,如果会,会怎么跌]]

[[通货膨胀是减缓灭亡最好的良药]]

[[经济问题是导致清朝灭亡]]

[[房产投资的几点建议]]

[[南宁买房建议]]

[[经济适用房都是内部分配的]]

[[普通人怎么办:尽早买房,努力挣钱抵御通胀]]

[[买房时机的选择(真TM厉害,这竟然是2010年的建议,可恨的是2020年才看到)]]

[[永远不要和白痴争辩,因为他会把你的智商拉到和他同一水平,然后用丰富的经验打败你]]

[[当个农民也要懂政策,要顺政策而为]]

[[房子越早买越好,政府想钱想疯了]]

[[利益才是政府行为的指挥棒]]

[[建议一定是建立在严肃考察的基础上]]

[[石家庄]]

[[投资最重要的是稀缺性,买房首选公务员小区]]

[[远离垃圾人]]

[[高房价或许有天会崩盘,但你等不到那一天]]

[[房子不仅要早买,而且有能力的话不要怕压力,争取一步到位]]

[[要用发展的眼光看问题,只要努力,只会越来越好,越来越轻松]]

[[性格决定命运]]

[[2012年不取消调控,还有房价维稳顺利换届考虑]]

[[洼地最终都会被填平,多数城市是早买胜于晚买]]

[[西部]]

[[短期波动属于正常现象,需要关注的是长期趋势]]

[[对于具备投资属性的商品,供求关系是指货币与商品之间的关系]]

[[早买的风险小于晚买]]

[[小开发商的房子能不能买?]]

[[大兴土木搞建设的城市,房价都底不了]]

[[天子脚下:二手老房买得好,拆迁补偿少不了]]

[[君为贵,商人、技工次之,农民为轻,打工人为底]]

[[历史总是惊人的相似]]

[[关于房贷]]

[[买卖商品房会逐渐变成富人的游戏]]

[[政府还是更在意农民问题]]

[[治国需要用贪官、反贪官]]

[[二线城市典型代表]]

[[关于商铺和住宅投资]]

[[关于房产调控]]

[[关于房产税]]

[[老公房的拆迁问题]]

[[投资新房还是老公房]]

[[高端盘有房价带动作用]]

[[买房和没买房的差距]]

[[房产交易历史]]

[[契税的历史]]

[[廉租房的历史]]

[[未来房地产市场的发展]]

[[房产到期]]

[[买学区房问题]]

[[历史的结局]]

[[人口普查]]

[[买房难之回不去的乡 & 拉美人过得比你想象的好]]

[[北京西三旗]]

[[买房争取一步到位]]

[[收入稳定的家庭如何买房]]

[[贷款还是全款]]

[[00后的买房需求从何而来]]

[[意大利的住房模式]]

[[北京远洋山水]]

[[精英的资产]]

[[北京三环塔楼]]

[[普通人买房的未来]]

[[北京房价超香港]]

[[中国的新闻不可信,精英的有钱是你想象不到的]]

[[限贷对精英没用]]

[[外国国籍在中国生活是更好的选择]]

[[通货膨胀和房价的关系]]

[[南京买房分析 & 买房要做好调查分析工作]]

[[读史读的不是故事,还是找历史规律,以古鉴今]]

[[贵阳]]

[[富人越富、穷人越穷]]

[[深圳 & 昆明仇书记 & 通货膨胀体制内高枕无忧、体制外自求多福]]

[[长春]]

[[佛山]]

[[首付提高的逻辑]]

[[四线城市]]

[[苏州工业园]]

[[住房公积金利率]]

[[公务员小区牛逼]]

[[俄罗斯]]

[[珠海 & 唯一自住房不只是投资 & 调控是最佳的选房时机]]

[[命运之矛]]

[[除非外族入侵或全国大饥荒,否则双轨制决定了房价不会崩盘]]

[[宋代房奴]]

[[王安石的青苗法之国家出政策的动机]]

[[什么是社会公平]]

[[还是有很多有钱人]]

[[开发商思维]]

[[郑州有前景]]

[[张献忠屠川]]

[[洪秀全、黄巢、李自成]]

[[朱元璋]]

[[曹参治国]]

[[晁错]]

[[民营小企业的老板和打工者]]

[[郭解]]

[[2010年的中国房地产]]

[[精英人群的平均收入决定房价]]

[[内地不是香港、海南]]

[[历史是一面镜子]]

[[买房一次性到位比较好]]

[[一线和二线]]

[[吕后篡权]]

[[小产权房]]

[[商铺和住宅]]

[[体制内外]]

[[2010年的上海]]

[[买房:物业与房贷]]

[[收紧住房贷款]]

[[买房:物业与房贷]]

[[体制内的28原则]]

[[贾谊]]

[[年轻人要早买房]]

[[不要低估通货膨胀]]

[[二三线城市与重庆]]

[[城区和郊区]]

[[守着金碗要饭吃]]

[[人制的社会,人就是制度]]

[[准公务员的好处]]

[[一线杭州]]

[[转篇文章:一个忽悠了几亿中国人的伪概念:所谓“中国房地产泡沫”]]

[[拆迁补偿]]

[[城市底层]]

[[农村自来水]]

[[袁盎]]

[[二三线城市,选新城还是老城]]

[[在中国,普通人手上闲钱不多的人被剥削]]

[[三分天注定七分靠打拼]]

[[人的前程有的时候不掌握在自己手里]]

[[西安与重庆]]

[[谢国中「空置率」]]

[[打工不如有一技之长的小老板]]

[[讲故事含沙射影ZG之房子不属于市场经济]]

[[西五环内的别墅,是相当稀缺的资源]]

[[调控降房价是刚需的一厢情愿]]

  • [[1、人人都有居住权。房子是用来住的,不是用来炒的]]

  • [[2、房子太贵了,租售比严重不合理,空置率太高,人均收入太低,早晚要崩盘]]

  • [[3、房价上涨造成物价上涨,人民生活变得困难]]

id:: 67013d96-afa6-434b-b858-ef19cc36f40b

[[房价持续上涨的本质是稀缺性让好房子成为资金最好的去处]]
[[民生问题]]
[[房产税的制定原则]]
[[维稳的本质是人民能吃饱饭]]

id:: 67013d96-34aa-4f5d-9276-21d06f6970da

id:: 67013d96-4668-4963-a675-e70419101f27

[[垄断可以控制价格,维持稳定]]
#card 体制内的住房问题有国家保驾护航 #card

  • 回头还说公租房

在私企打过工的都知道,毫无归属感可言,老板脑袋一发热,随时让员工卷铺盖卷走人。那是要多没保障有多没保障。原因是社会关系,关键客户,都掌握在老板一个人手里,员工就是打个下手,一不爽了,就换人呗。

统治者可知道不能这么用人的。一个庞大的国家机器要想正常运转,必须得让手下的和自己的利益一致。如果自己吃肉,手下的连汤都没得喝,这个机器就转不动了。

因此,在房价高涨的时代,保障房才成为中央默认的公务员房、垄断企业房。
公租房首要解决的就是手下里面最底层人士的住房问题。
我认为针对于体制内来说,无论是公务员,事业单位,还是国有企业的初级员工,都可以通过所在单位申请公租房,公租房的租金会略低于市场,主要是单位一定会提供补贴。
体制外对公租房的申请就没有那么幸运了。

[[体制内的住房问题不难解决]]
id:: 676805f1-0ace-4f05-9dc9-34b391f48521

id:: 67013d96-f028-4d1d-84b9-a78e27224f1b

[[农产品价格的抬头会导致物价全面上涨,但国家不会坐视不管且有能力管]]
#card 资金会在优质资产之间流动,而决定优质资产价格的是精英阶层的购买力 #card

  • 一线城市仍然沉默,国家队在积极运动。二三线城市的房价上涨的成交量的回升却给了市场一个明确的信号。这是资金运动的规律。国家队对一线城市的布局,迫使资金流向二三线城市。二三线城市相对(与一线城市相比)不高的价位给出了较大上升空间的预期。

全国富人买北京上海,全省富人买省会,房价的合理性已经不能用简单的本地平均收入来衡量。精英阶层的购买力才是关键。

#card 资金流向规律决定了农产品和资产价格总有一个要涨,人为压制,一定会按下葫芦浮起瓢 #card

  • 明年物价进入持续上涨期是一个不容回避的问题。

在资金总量不变的前提下,巨量资金推动农产品价格上涨或者推动房价上涨是一个必须的选择。

今年政府用行政手段严厉打击蒜和绿豆价格的暴炒,基本上没有起到作用,资金有自己的运作规律,光靠拿张悟本出气也不能解决问题。

#card 资金流向规律决定了洼地不会一直是洼地 #card

  • 二三线城市的房价的上涨使与一线城市的差价缩小,为一线城市的发力提供了动能。

无论你喜欢还是不喜欢,都不是以人的意志为转移的

#card 房价暴涨是相对于钱而言的,不是相对于实际购买力而言的 #card

  • tjOOSAN:

。。。。。。暴涨之后。。。。。。

我们不就是第二个日本吗?

供求关系?供求关系,现在是谁在决定?国家!

国家的经济结构决定的。制造业的资金都进入房地产了。能不涨吗?普通人有几个可以够炒房资格的?

日本 当初也是供求关系!~~ 供求关系的根本也不应脱离,国家的经济实力!!

还暴涨?怎么涨?再涨都够去美国买房了!! 你这不扯淡么

kkndme:

中国和日本最大的不同在于日本的货币是开放的,中国的不是,是不能自由兑换的。

暴涨是相对于钱而言的,不是相对于实际购买力而言的。

80年代工资200多块钱一个月的时候,是不能想象90年代末北京城区5000每平米的房价的。那时候万元户已经是富人的代表了。

90年代末工资1000块钱的时候是不能想象现在30000一平米的房价的。90年代的100万绝对是富裕群体。可现在连个中产都算不上。

货币的持续贬值你没有考虑

#card 集中发展大城市是导致优质土地稀缺的原因 #card

  • 中国经济发展不平衡,牺牲全国大多数城市和乡村,来保证北上广深及大部分省会城市的繁荣才是造成土地稀缺的愿意。

土地有的是,房子有的是,但好位置的土地和房子并不多。

一方面大量的小县城和乡镇、村庄人口锐减,因为缺乏谋生手段不得不背景离乡外出打工,另一方面超大型城市越来越拥挤,土地资源越来越稀缺。

这就是中国集中发展极少数标杆城市所造成的呀,也是因为如此,才造成了中国金子塔式的收入结构,贫富差距越来越悬殊。

#card 历史是一面镜子,不同的国情决定了采取同样的政策结果可能是南辕北辙 #card

  • 博古才能通今,不了解历史无法治理国家,不了解历史也无法对事务有一个清楚的认识。

我们的今天本来就是历史的延续,前人经验和智慧的总结,不是一句话就可以抹杀的。

因为秦以后漫长帝国时代的大一统,才会把中央集权延续到现在。

而西方封建时代延续到地理大发现,诸侯割据王国、公国、侯国林立为现代的西方提供了民主制度的可能。

在制度上完全的不可比性,使向国际接轨成为了笑话。

我们看到的结果就是,物价上涨与西方接轨,甚至堂而皇之的超过西方,体制外的工资则与非洲结果,也算是国际化了。

#card ## 屁股决定脑袋,人民不知厉害关系选房子,政府选农产品

  • 对于渴望拥有一套产权住房的都市小白领对希望房价狂降已经到了歇斯底里的程度,他们赞成农产品价格放开,让资金炒作农产品,而离开房地产市场。理由很简单,一套房子一涨就是几十万甚至上百万,而大米小麦,一斤就算涨到10块,也根本不能影响到自己的生活质量。

如果我国农产品价格是开放的,资金流向大米、小麦、猪肉,并且允许囤积,房地产一定会下跌的,这是毫无疑问的。

但是,我们看到的绝不是10块钱一斤的大米、小麦,而是500块钱、1000块钱一斤的大米、小麦。

我国将会出现大面积的饥荒,几千万甚至上亿的底层人士饿死街头,社会将出现大的动荡。

而产权房屋价格的上涨牺牲的主体只是体制外部分都市白领的利益,换来的不过是网络上没完没了的牢骚和咒骂。

巨量资金必须有地方去,如今面临的房地产和农产品之间的选择,你认为政府会怎么做?

#card 各个阶层的住房问题都安排的妥妥的
#card 顶层的岁月静好来自于底层的负重前行
#card 资金终会流向具有稀缺性的资产
#card 土地的稀缺决定了大多数人永远买不起想买的房子
#card 一二线买房只会越来越难,最终租房会成为主流

  • 在北京一个年薪15万的普通家庭仍然买的起房,在五环外,只是你愿不愿意买。

  • 但以后一个年薪15-20万的普通家庭买房子,即使是五环外的,也只能是梦想了。

  • 租房将成为今后小白领主流的生活方式。

#card 如果房价不涨,那其他产品会怎么涨

[[城中村不会长期存在]]

#card 三四线城市的未来
id:: 67deb4c0-7f92-4785-b76e-69d2d9e6e2ec

#card 公租房的量级不会冲击到商品房市场
id:: 67cc015d-55c6-4da9-9f6d-2a39214c3030

#card 权利让革族成为苗族的一支
#card 房价是否会跌,如果会,会怎么跌
#card 通货膨胀是减缓灭亡最好的良药
#card 房产投资的几点建议
id:: 67cc0165-7147-48be-8365-feaeeb7d32be

#card 经济适用房都是内部分配的
[[普通人怎么办:尽早买房,努力挣钱抵御通胀]]

#card 永远不要和白痴争辩,因为他会把你的智商拉到和他同一水平,然后用丰富的经验打败你
#card 当个农民也要懂政策,要顺政策而为
id:: 67cc0165-6fcd-4f55-8f1b-1bf4fa8798c8

#card 房子越早买越好,政府想钱想疯了
#card 利益才是政府行为的指挥棒
#card 建议一定是建立在严肃考察的基础上
#card 石家庄
#card 远离垃圾人
#card 高房价或许有天会崩盘,但你等不到那一天
#card 房子不仅要早买,而且有能力的话不要怕压力,争取一步到位
#card 要用发展的眼光看问题,只要努力,只会越来越好,越来越轻松
#card 性格决定命运
#card 2012年不取消调控,还有房价维稳顺利换届考虑
#card 洼地最终都会被填平,多数城市是早买胜于晚买
#card 西部
#card 短期波动属于正常现象,需要关注的是长期趋势
#card 对于具备投资属性的商品,供求关系是指货币与商品之间的关系
#card 早买的风险小于晚买
#card 小开发商的房子能不能买?
#card 大兴土木搞建设的城市,房价都底不了
#card 天子脚下:二手老房买得好,拆迁补偿少不了
id:: 67cc0165-c91f-4724-90f0-a36a39512e7f

#card 君为贵,商人、技工次之,农民为轻,打工人为底
#card 关于房贷
#card 买卖商品房会逐渐变成富人的游戏
#card 政府还是更在意农民问题
#card 治国需要用贪官、反贪官
#card 二线城市典型代表
#card 关于商铺和住宅投资
#card 关于房产调控
#card 关于房产税
#card 老公房的拆迁问题
#card 高端盘有房价带动作用
#card 买房和没买房的差距
#card 房产交易历史
#card 契税的历史
#card 廉租房的历史
#card 未来房地产市场的发展
#card 房产到期
#card 买学区房问题
id:: 67cc0165-9767-4ec9-a15a-93c29aa3e343

#card 人口普查
id:: 67cc0165-f2f3-49a8-a13c-944465ecc6a3

#card 买房难之回不去的乡 & 拉美人过得比你想象的好
[[北京西三旗]]

#card 买房争取一步到位
#card 收入稳定的家庭如何买房
#card 贷款还是全款
#card 00后的买房需求从何而来
#card 意大利的住房模式
#card 北京远洋山水
#card 精英的资产
#card 普通人买房的未来
#card 北京房价超香港
#card 中国的新闻不可信,精英的有钱是你想象不到的
#card 限贷对精英没用
#card 外国国籍在中国生活是更好的选择
id:: 67cc016a-6079-4748-9166-b5f345f84592

#card 通货膨胀和房价的关系
#card 南京买房分析 & 买房要做好调查分析工作
id:: 67cc016a-3355-44ee-ac8b-5a011fbd3c33

id:: 67cc016a-dccc-49e8-a2cb-f38e95a09696

#card 读史读的不是故事,还是找历史规律,以古鉴今
#card 贵阳
#card 深圳 & 昆明仇书记 & 通货膨胀体制内高枕无忧、体制外自求多福
#card 长春
#card 佛山
#card 首付提高的逻辑
#card 四线城市
#card 苏州工业园
#card 住房公积金利率
#card 公务员小区牛逼
id:: 67cc016a-b5e2-451f-8108-afc76a3c1009

#card 俄罗斯
#card 珠海 & 唯一自住房不只是投资 & 调控是最佳的选房时机
#card 命运之矛
#card 除非外族入侵或全国大饥荒,否则双轨制决定了房价不会崩盘
#card [[kkndme聊北宋、唐朝]]
id:: 67cc016a-053a-48ee-96a0-c63b4fd7a1bc

#card 王安石的青苗法之国家出政策的动机
#card 什么是社会公平
#card 还是有很多有钱人
#card 开发商思维
#card 郑州有前景
#card 张献忠屠川
#card 洪秀全、黄巢、李自成
#card 朱元璋
#card 曹参治国
#card 晁错
#card 民营小企业的老板和打工者
#card 郭解
#card 2010年的中国房地产
#card 精英人群的平均收入决定房价
#card 内地不是香港、海南
#card 历史是一面镜子
#card 买房一次性到位比较好
#card 一线和二线
#card 吕后篡权
#card 小产权房
#card 商铺和住宅
#card 体制内外
#card 2010年的上海
#card 收紧住房贷款
[[买房:物业与房贷]]

  • fallenleafe:

关注本贴多日,非常欣赏楼主的睿智和理性。
小女子也是上海众多买房人之一,目前所谓单身剩女,得家人支持有一百五十万的首付金。基本确定买在内环交通方便的次新房(老公房停车太成问题)。
对上海浦西内环内的诸多区位和楼盘做过研究,发现离地铁近的同时能有苏州河景观的房源最具性价比,满足交通性和景观稀缺性的双重优势(上海内环内几乎没什么安静同时又具有自然资源的地方)。
现在基本确定了两个小区,比较纠结的问题有两个。
第一个问题,一个是小区管理和区位优势明显单价在3万3左右,另一个区位和管理比较差,名声不好,但是面苏州河的独一无二景观,单价在3万左右。从小区管理的角度,我也认可楼主的看法,管理好的小区升值空间大,管理差的小区由于群租问题严重,目前价格偏低,但是这个软件问题在日后随着自住率的提高貌似也能解决。究竟我该选一个景观资源非常稀缺的管理和配套相对较差的小区,还是一个相对成熟价格稍高同时综合配套比较好的小区?那个小区比较有保值和投资优势?
第二个问题,目前的月收入税后刚过万元,如果拿150万的首付买一房大概80平左右,是比较轻松的,月供不成问题(目前租的一室一厅租金3500,已经可以做为还贷资金了)。但是考虑长远问题和一些小户型的局限性,非常想投资一套能长久居住的两房甚至三房(众所周知,一个小区里好的位置总是留给最大的户型)。这样的话,大概一套就要在320万甚至350万,我需要每月还贷1万2左右,基本和我的月工资持平。从个人观点来看,我比较想冒这个风险,比较合适的做法是首付降低到3成左右,留出三十万左右的还贷资金用以应付前面两至三年的还贷。由于目前单身,两至三年后也许家庭收入就可以完全承受这个月供。即使还是单身,目前事业发展良好,对2年后的收入在2万以上很有信心,因此还是认为可以目前阶段多点勇气,目光长远,以保证日后生活安康。
不知道楼主怎么看这个问题?如果是房价持续上涨的情况,也许更该相信我的工资也会持续上涨,是否我看问题太乐观?贷款200万的风险是不是会太大?

  • kkndme:

  • 第一个问题:物业管理对于小区的价值起着至关重要的作用,好的物业管理才能让人居住舒适,这一点是非常重要的。软件的提升往往比硬件的提升难度更大。物业很差的景观楼盘,可以比喻为鲜花丛中的一坨屎,周边环境再好,它也是一坨屎。一坨屎能否脱胎换骨变成黄金,存在着较大的不确定性。
    第二个问题:是否承受较高月供,取决于你对未来的预期,所以你要仔细分析你的行业前途,如果你所处的行业告诉成长,或者你的能力职位将得到进一步提升,你可以承受较高的月供。
    一般来说月供不要超过全部收入的70%,如果超过这个边际,就会有较大风险。

#card 体制内的28原则
#card 贾谊
#card 不要低估通货膨胀
#card 二三线城市与重庆
#card 城区和郊区
#card 人制的社会,人就是制度
准公务员的好处

一线杭州

#card 转篇文章:一个忽悠了几亿中国人的伪概念:所谓“中国房地产泡沫”
#card 城市底层
#card 农村自来水
#card 袁盎
#card 二三线城市,选新城还是老城
#card 在中国,普通人手上闲钱不多的人被剥削
#card 三分天注定,七分靠打拼
#card 人的前程有的时候不掌握在自己手里
#card 西安与重庆
#card 谢国中「空置率」
#card 打工不如有一技之长的小老板
id:: 67cc0174-e658-4f3d-9431-fb5c9f4523a1

#card 讲故事含沙射影ZG之房子不属于市场经济
id:: 67cc0178-315d-4e40-b0f6-f59a08e5394d

id:: 67cc0178-f35a-4416-bab8-e9bd1a5d2ace

#card 保钓事件之死要面子活受罪
id:: 67cc0178-b4a8-44bd-806d-57ea97d88cd0


@A Tour Through My Zettelkasten

启发

  • 按类型给 tag 分配颜色

sobjornstad/tzk: Zettelkasten edition and tooling for TiddlyWiki (github.com) 作者工作流对应的 [[TiddlyWiki]] 模板

Organizational principles

  • 所有 tiddler 使用驼峰法命名

  • 通过 Links 关键相同主题的 idea

  • tags 使用不同的背景颜色区分不同的功能

    • Indexes, as per Luhmann (green)

    • Classifiers of publicity status (black) 是否公开

    • Lists of things, as per TW understanding of tags (blue) 主题聚合

    • Create different types of tiddlers and pseudo-types (red, orange)

      • Source 信息来源

      • PAO(Person, Animal, or Organization)

      • Places

      • Tool

    • Identify areas to work on – Stub, 需要拆分 NeedsExcision, etc. (yellow) 需要继续完成的

  • Index tiddlers 关于某个主题的总览

  • Stretchtext and description transclusion 提供关于笔记的摘要,供聚合使用

  • Subtiddlers 类似于 logseq 的namespace,另外一种形式聚合方式。

  • Bibliographies 关于特定主题参考内容的聚合字段

    • tiddler 中字段 Bibliographies 填上材料对应的主题

    • description 提供内容摘要

  • Write 当前需要继续完成的内容

    • stubs

    • misssing

    • needing attention 需要处理的内容

    • todo-item 包含 todo 的集合

    • open question

  • Reference Explorer 展示和当前 tiddler 关联的 backlink、link,提供按 tags 过滤

    • 列出关联的 link 也很重要
  • link graph 通过 TiddlyMap 层次化展示当前 tiddler 关联的其他 tiddler

Types

[[TiddlyWiki/Plugin]]

  • CodeMirror vim 模式

  • Details widget 页面聚合插件

  • Relink 改名自动更新引用

  • Stretchtext

  • TiddlyTables 表格

  • Tidgraph

  • Triple-click to edit

  • [[TiddlyRemember]] anki 制卡工具

隐私开关

  • 隐私块通过新建 tiddler 实现,同时需要隐藏标题

  • 编译脚本根据公开的 tiddler 新建 publish 版本

ReadingInbox 管理和安排待阅读的材料

  • Source pasting 粘贴向导,记录资源

SimpleAnalytics 网页访问信息分析脚本

Tag coloration and columnizing 实现按颜色对标签进行排序

Philosophy 笔记关联方法背后对应的哲学

  • JustGetStarted 无压力记录想法,区分完成的笔记和没有完成的笔记

  • ThreeLinks


@A Unified Approach to Interpreting Model Predictions

[[Abstract]]

  • Understanding why a model makes a certain prediction can be as crucial as the prediction’s accuracy in many applications. However, the highest accuracy for large modern datasets is often achieved by complex models that even experts struggle to interpret, such as ensemble or deep learning models, creating a tension between accuracy and interpretability. In response, various methods have recently been proposed to help users interpret the predictions of complex models, but it is often unclear how these methods are related and when one method is preferable over another. To address this problem, we present a unified framework for interpreting predictions, SHAP (SHapley Additive exPlanations). SHAP assigns each feature an importance value for a particular prediction. Its novel components include: (1) the identification of a new class of additive feature importance measures, and (2) theoretical results showing there is a unique solution in this class with a set of desirable properties. The new class unifies six existing methods, notable because several recent methods in the class lack the proposed desirable properties. Based on insights from this unification, we present new methods that show improved computational performance and/or better consistency with human intuition than previous approaches.

[[Attachments]]

SHAPfeature (x)=set:feature  set [ set ×(F set )]1[Predictset (x)Predictset \ feature (x)]\operatorname{SHAP}_{\text {feature }}(x)=\sum_{\text {set:feature } \in \text { set }}\left[\mid \text { set } \mid \times\left(\begin{array}{c}F \\ \mid \text { set } \mid\end{array}\right)\right]^{-1}\left[\operatorname{Predict}_{\text {set }}(x)-\operatorname{Predict}_{\text {set } \backslash \text { feature }}(x)\right]

特征 Shap 值

  • 给定当前的一组特征值,特征值对实际预测值与平均预测值之差的贡献就是估计的 Shapley 值。

  • 不是从模型训练中删除特征后的预测值之差

  • n 个特征对应 2n2^n 个模型

  • 缺失

    • 在所有特征中采样,预测时使用一个随机值,观察模型输出如何。
  • 引入

    • 预测时使用这个特征的值,模型输出如何。
  • 按不同顺序引入特征,计算边际贡献。

Ref


@Effective learning Twenty rules of formulating knowledge

1 Do not learn if you do not understand :-> 如果不理解不如不学
2 Learn before you memorize :-> 先学再记

  • 对学习的知识建立一个整体印象

3 Build upon the basics :-> 从基础开始
4 Stick to the minimum information principle 最小信息原则 :<-> cards should never ask about more than one thing

  • 之前多个合在一起的正则卡片学习体验很差

5 Cloze deletion is easy and effective :-> 填空简单而有效
6 Use imagery :-> 图片
7 Use mnemonic techniques :-> 使用助记技巧
8 Graphic deletion is as good as cloze deletion :-> 图片填空
9 Avoid sets :-> 避免答案是一大堆正确但是无序的集合
10 Avoid enumerations :-> 避免枚举类型,比如字母表
11 Combat interference :-> 对抗干扰,如何处理容易混淆的问题。尽早处理。

  • 利用自己特殊的例子辅助记忆

12 Optimize wording :-> 优化措辞,减少多余信息
13 Refer to other memories :-> 相互链接记忆
14 Personalize and provide examples :-> 建立材料与个人的联系并给出例子
15 Rely on emotional states :-> 借助情绪状态

  • 使用当前状态记忆,比如你在失落的时候记住一个单词,再次失落时可能想起这个单词

16 Context cues simplify wording :-> 利用上下文简化记忆(标注是哪一个领域的问题等)
17 Redundancy does not contradict minimum information principle :-> 冗余但不违背最小信息原则

  • 冗余是比需要的信息更多的信息。最小信息不代表字符数最小

  • 从多个角度记忆同一个内容

18 Provide sources :-> 提供信息来源
19 Provide date stamping :-> 提供时间标记
20 Prioritize :-> 明确优先级调整阅读顺序

  • effective learning is all about prioritizing. In incremental reading you can start from badly formulated knowledge and improve its shape as you proceed with learning (in proportion to the cost of inappropriate formulation). If need be, you can review pieces of knowledge again, split it into parts, reformulate, reprioritize, or delete. See also: Incremental reading, Devouring knowledge, Flow of knowledge, Using tasklists

@How to Take Smart Notes

Highlights

  • To get a good paper written, you only have to rewrite a good draft; to get a good draft written, you only have to turn a series of notes into a continuous text.

  • While the literature notes will be stored within the reference system together with the bibliographic details, separate from the slip-box, but still close to the context of the original text, they are already written with an eye towards the lines of thoughts within the slip-box. Luhmann describes this step as follows: “I always have a slip of paper at hand, on which I note down the ideas of certain pages. On the backside I write down the bibliographic details. After finishing the book I go through my notes and think how these notes might be relevant for already written notes in the slip-box. It means that I always read with an eye towards possible connections in the slip-box.” (Luhmann et al., 1987, 150)

  • Here, everything is about building up a critical mass of useful notes in the slip-box, which gives us a clear idea of how to read and how to take literature notes.

  • But all of this would be just an extra step before you do the only step that really counts, which is to take the permanent note that will add value to the actual slip-box.

  • So if you are writing by hand, you are forced to think about what you hear (or read) – otherwise you wouldn’t be able to grasp the underlying principle, the idea, the structure of an argument.

  • The very moment we decide on a hypothesis, our brains automatically go into search mode, scanning our surroundings for supporting data, which is neither a good way to learn nor research.

  • We just seem to happen to read the publications that tend to confirm what we already know.

  • Confirmation bias is tackled here in two steps: First, by turning the whole writing process on its head, and secondly, by changing the incentives from finding confirming facts to an indiscriminate gathering of any relevant information regardless of what argument it will support.

  • With practice comes the ability to find the right words to express something in the best possible way, which means in a simple, but not simplified way. Not only will the readers of your text appreciate your ability to explain something clearly, those you talk to will benefit from this ability as well, as it is not limited to writing.

  • The ability to spot patterns, to question the frames used and detect the distinctions made by others, is the precondition to thinking critically and looking behind the assertions of a text or a talk. Being able to re-frame questions, assertions and information is even more important than having an extensive knowledge, because without this ability, we wouldn’t be able to put our knowledge to use. The good news is that these skills can be learned.

  • Taking smart notes is the deliberate practice of these skills. Mere reading, underlining sentences and hoping to remember the content is not.  10.4

  • Physicist and Nobel Prize winner Richard Feynman once said that he could only determine whether he understood something if he could give an introductory lecture on it.

  • Reading, especially rereading, can easily fool us into believing we understand a text. Rereading is especially dangerous because of the mere-exposure effect: The moment we become familiar with something, we start believing we also understand it. On top of that, we also tend to like it more (Bornstein 1989).

  • And while writing down an idea feels like a detour, extra time spent, not writing it down is the real waste of time, as it renders most of what we read as ineffectual.

  • We face here the same choice between methods that make us feel like we learned something and methods that truly do make us learn something.

  • Writing, taking notes and thinking about how ideas connect is exactly the kind of elaboration that is needed to learn.

  • The slip-box takes care of details and references and is a long-term memory resource that keeps information objectively unaltered. That allows the brain to focus on the gist, the deeper understanding and the bigger picture, and frees it up to be creative. Both the brain and the slip-box can focus on what they are best at.

  • What good readers can do is spot the limitations of a particular approach and see what is not mentioned in the text.

  • psychologist Lonka refers to, goes a step further and

  • Lonka recommends what Luhmann recommends: Writing brief accounts on the main ideas of a text instead of collecting quotes.

  • Academic or nonfiction texts are not written like this because in addition to the writing, there is the reading, the research, the thinking and the tinkering with ideas.

  • More notes mean more possible connections, more ideas, more synergy between different projects and therefore a much higher degree of productivity. Luhmann’s slip-box contains about 90,000 notes, which sounds like an incredibly large number. But it only means that he wrote six notes a day from the day he started to work with his slip-box until he died.

  • In contrast to manuscript pages per day, a certain number of notes a day is a reasonable goal for academic writing.

  • We reinvent and rewrite our memory every time we try to retrieve information.

  • Luhmann states as clearly as possible: it is not possible to think systematically without writing (Luhmann 1992, 53).

  • Richard Feynman once had a visitor in his office, a historian who wanted to interview him. When he spotted Feynman’s notebooks, he said how delighted he was to see such “wonderful records of Feynman’s thinking.” “No, no!” Feynman protested. “They aren’t a record of my thinking process. They are my thinking process. I actually did the work on the paper.” “Well,” the historian said, “the work was done in your head, but the record of it is still here.” “No, it’s not a record, not really. It’s working. You have to work on paper, and this is the paper.”[33] This, obviously, was a very important distinction to Feynman, much more than just a linguistic difference – and for a good reason: It is the distinction that makes all the difference when it comes to thinking. Philosophers, neuroscientists, educators and psychologists like to disagree in many different aspects on how the brain works. But they no longer disagree when it comes to the need for external scaffolding. Almost all agree nowadays that real thinking requires some kind of externalization, especially in the form of writing. “Notes on paper, or on a computer screen […] do not make contemporary physics or other kinds of intellectual endeavour easier, they make it possible” is one of the key takeaways in a contemporary handbook of neuroscientists (Levy 2011, 290) Concluding the discussions in this book, Levy writes: “In any case, no matter how internal processes are implemented, insofar as thinkers are genuinely concerned with what enables human beings to perform the spectacular intellectual feats exhibited in science and other areas of systematic enquiry, as well as in the arts, they need to understand the extent to which the mind is reliant upon external scaffolding.”

  • A common way to embed an idea into the context of the slip-box is by writing out the reasons of its importance for your own lines of thought.

  • Robert and Elizabeth Ligon Bjork from the University of California suggest distinguishing between two different measurements when it comes to memory: Storage strength and retrieval strength (Bjork 2011). They speculate that storage strength, the ability to store memories, only becomes greater over one’s lifetime. We add more and more information to our long-term memory. Just by looking at the physical capacity of our brains, we can see that we could indeed probably store a lifetime and a bit of detailed experiences in it (Carey 2014, 42).

  • Luhmann wrote an index with a typewriter on index cards. In the Zettelkasten, keywords can easily be added to a note like tags and will then show up in the index. They should be chosen carefully and sparsely. Luhmann would add the number of one or two (rarely more) notes next to a keyword in the index (Schmidt 2013, 171).

  • The first type of links are those on notes that are giving you the overview of a topic. These are notes directly referred to from the index and usually used as an entry point into a topic that has already developed to such a degree that an overview is needed or at least becomes helpful.

  • Comparing, differentiating and connecting notes are the basis of good academic writing, but playing and tinkering with ideas is what leads to insight and exceptional texts.

  • Only if nothing else is lingering in our working memory and taking up valuable mental resources can we experience what Allen calls a “mind like water” - the state where we can focus on the work right in front of us without getting distracted by competing thoughts.

  • Only if you can trust your system, only if you really know that everything will be taken care of, will your brain let go and let you focus on the task at hand.

  • Instead of adding notes to existing categories or the respective texts, he wrote them all on small pieces of paper, put a number in the corner and collected them in one place: the slip-box.

  • The best way to maintain the feeling of being in control is to stay in control. And to stay in control, it’s better to keep your options open during the writing process rather than limit yourself to your first idea.

  • Luhmann had two slip-boxes: a bibliographical one, which contained the references and brief notes on the content of the literature, and the main one in which he collected and generated his ideas, mainly in response to what he read.

  • Whenever he read something, he would write the bibliographic information on one side of a card and make brief notes about the content on the other side (Schmidt 2013, 170). These notes would end up in the bibliographic slip-box. In a second step, shortly after, he would look at his brief notes and think about their relevance for his own thinking and writing. He then would turn to the main slip-box and write his ideas, comments and thoughts on new pieces of paper, using only one for each idea and restricting himself to one side of the paper, to make it easier to read them later without having to take them out of the box. He kept them usually brief enough to make one idea fit on a single sheet, but would sometimes add another note to extend a thought.

  • He did not just copy ideas or quotes from the texts he read, but made a transition from one context to another.

  • Writing that an author struggles in one chapter to justify his method can be a much more adequate description of this chapter’s content than any quote from the text itself (this would call for an explanation, of course).

  • If the existing note had the number 22, the new note would become note number 23. If 23 already existed, he named the new note 22a. By alternating numbers and letters, with some slashes and commas in between, he was able to branch out into as many strings of thought as he liked.

  • The last element in his file system was an index, from which he would refer to one or two notes that would serve as a kind of entry point into a line of thought or topic. Notes with a sorted collection of links are, of course, good entry points.

  • At this point, it should become clear that you don’t need to wait for a genie to appear, as each step is clearly not only within your abilities, but also straightforward and well defined: Assemble notes and bring them into order, turn these notes into a draft, review it and you are done.

  • Thinking, reading, learning, understanding and generating ideas is the main work of everyone who studies, does research or writes.

    1. Make literature notes. Whenever you read something, make notes about the content. Write down what you don’t want to forget or think you might use in your own thinking or writing.
    1. Now add your new permanent notes to the slip-box by: a)    Filing each one behind one or more related notes (with a program, you can put one note “behind” multiple notes; if you use pen and paper like Luhmann, you have to decide where it fits best and add manual links to the other notes). Look to which note the new one directly relates or, if it does not relate directly to any other note yet, just file it behind the last one. b)    Adding links to related notes. c)    Making sure you will be able to find this note later by either linking to it from your index or by making a link to it on a note that you use as an entry point to a discussion or topic and is itself linked to the index.
  • Something to write with and something to write on (pen and paper will do) ·       A reference management system (the best programs are free) ·       The slip-box (the best program is free) ·       An editor (whatever works best for you: very good ones are free)

  • Even though you could basically emulate the slip-box with any program that allows setting links and tagging (like Evernote or a Wiki), I strongly recommend using Daniel Lüdecke’s Zettelkasten.

  • To give you all the resources you need to work in the best possible way with the best technique available.

  • critically. By writing, students demonstrate what they have learned, show their ability to think critically and ability to develop ideas.

  • Many students and academic writers think like the early ship owners when it comes to note-taking.

  • In the old system, the question is: Under which topic do I store this note? In the new system, the question is: In which context will I want to stumble upon it again?

  • The slip-box is the shipping container of the academic world.

  • To achieve a critical mass, it is crucial to distinguish clearly between three types of notes: 1.   Fleeting notes, which are only reminders of information, can be written in any kind of way and will end up in the trash within a day or two. 2.    Permanent notes, which will never be thrown away and contain the necessary information in themselves in a permanently understandable way. They are always stored in the same way in the same place, either in the reference system or, written as if for print, in the slip-box. 3.    Project notes, which are only relevant to one particular project. They are kept within a project-specific folder and can be discarded or archived after the project is finished.

  • The only permanently stored notes are the literature notes in the reference system and the main notes in the slip-box. The former can be very brief as the context is clearly the text they refer to. The latter need be written with more care and details as they need to be self-explanatory. Luhmann never underlined sentences in the text he read or wrote comments in the margins. All he did was take brief notes about the ideas that caught his attention in a text on a separate piece of paper: “I make a note with the bibliographic details. On the backside I would write ‘on page x is this, on page y is that,’ and then it goes into the bibliographic slip-box where I collect everything I read.” (Hagen, 1997)

  • The first teaches the formal requirements: style, structure or how to quote correctly. And then there are the psychological ones, which teach you how to get it done without mental breakdowns and before your supervisor or publisher starts refusing to move the deadline once more.

  • the rough order is always the same: Make a decision on what to write about, plan your research, do your research, write. Interestingly enough, these road maps usually come with the concession that this is only an idealised plan and that in reality, it rarely works like that.

  • Basically, that is what Hans-Georg Gadamer called the hermeneutic circle (Gadamer 2004).

  • It accompanies everything: We have to read with a pen in hand, develop ideas on paper and build up an ever-growing pool of externalised thoughts.

  • By focusing on what is interesting and keeping written track of your own intellectual development, topics, questions and arguments will emerge from the material without force. Not only does it means that finding a topic or a research question will become easier, as we don’t have to squeeze it out of the few ideas that are on top of our head anymore, every question that emerges out of our slip-box will naturally and handily come with material to work with.

  • I am convinced that the attempt of these study guides to squeeze a nonlinear process like writing into a linear order is the main reason for the very problems and frustrations they promise to solve.

  • Nothing motivates us more than the experience of becoming better at what we do.

  • It is the simplest test: We tend to think we understand what we read – until we try to rewrite it in our own words.

  • The same goes for writing permanent notes, which have another feedback loop built-in: Expressing our own thoughts in writing makes us realise if we really thought them through.

  • It is not the slip-box or our brains alone, but the dynamic between them that makes working with it so productive.

  • Give Each Task Your Undivided Attention

  • less successful ones. The right question is: What can we do differently in the weeks, months or even years before we face the blank page that will get us into the best possible position to write a great paper easily?

Literature note

Permanent note

卡片盒的价值

  • 很多小说家会强迫自己每天写作多久以或写多少字,就好像储蓄一样。学术写作除了写之外,还有很多其他的步骤需要花费时间,但是每天写的卡片其实是可以相互链接的内容,这就是复利的力量。[[网络效应]]

Ref

  • [[Youtube]] 作者访谈 Interview and Q&A with Sönke Ahrens on How to Take Smart Notes - YouTube

  • 作者在 Quora 上的一个回答:Sönke Ahrens’s answer to What is the best way to take notes? - Quora

    • 记下的笔记,依旧是孤立的。利用 [[Zettelkasten]] 的方法将笔记链接起来。

    • 尽可能集中收集你的一切想法、笔记

    • 快速记录灵感,一天之内整理成为笔记。

      • First, don’t worry too much about the notes you take while you are doing something else. 快速记录 index,避免影响你正在干的事情

      • as quick notes are only reminders of an idea, you need to turn them (ideally within a day)__ into permanently understandable notes.__ 当天修改成为可以永久理解的笔记。

    • 如何构建系统的一些实践[[方法]]

      • 标准化 Standardize:集中在一个地方保存格式相同的笔记,每一篇笔记有一个唯一的编号。

      • 阐述 Elaborate:思考新的笔记是否和旧笔记相关(相斥、互补、相互修正),并将思考过程清晰记录在新的笔记中。

      • 链接 Connect,大部分笔记方法只是孤立的将笔记分到一个类别中。区分他们之间的相同点或不同点。不要事先将笔记分类,而是通过笔记之间的相互连接聚类成一个主题,从中产生思考感受,从「可以怎么用」来思考。

      • 每一篇笔记都有独立的 ID,新增加的笔记在与它最相关笔记的ID基础上增加编码。

      • 有编码之后,可以更加方便在不同的笔记中应用。比如今天看的文章笔记 id 为 ml001,就可以在日记中写下 ml001。相应的利用 grep 语法能快速查到引用这个id的笔记。

      • 建立 note-sequences,通过这种方法写文章或者书。

      • 笔记以字母排序建立笔记索引,每一次拥有新的主题方向,都可以建立一次索引。

      • 将这些记笔记的方法当成习惯养成。笔记收集 - 建立联系 - 编码存储 - 再联系

    • 其他人的笔记 [[vitamindy]]

  • 又一个读书笔记 How to Take Smart Notes: A Step-by-Step Guide - Nat Eliason

    • Smart Notes 来取代之前高亮文字,摘要+想法。

      • 高亮浪费时间,高亮的意义在于带来的想法,记录你的想法。

        • why did I highlight this?
      • 单纯高亮的文字,脱离语义后没有意义

      • 笔记对你的价值,而不是和书的相关程度

    • Grab your own copy of How to Take Smart Notes

    • Get a good notebook for taking notes as you read

    • Handwrite ideas as you have them while reading, and reference where they came from

      • 手写想法+来源
    • Upload your ^^highlights and ideas^^ once you finish a book

      • 看完书之后有足够多的想法吗?尝试去记录哪一些刷新自己的认知?
    • File those ideas in their most useful contexts

      • 对笔记按主题分类,roam 可以使用引用 [[爱]]
    • Use those ideas to create new works!

      • 知识的复利

@中国未来20年的经济大趋势 旧

[[Summary]] 地理位置不同决定中国和西方的发展走出不同的道路,政府在两种文化中扮演非常不同的角色。

一 、 中西方的历史文化差异 ;

  • 地理环境

    • 农业文明

      • 农业文明的基础是光合作用 , 它把太阳能转化成农作物和可畜养动物 , 而动植物都依赖土地 。 这就意味着土地的大小决定了农业产出和所能负担的人口数量 。

      • 在整个农业文明的历史中 , 土地的稀缺性是贯穿始终的主题 。

      • 某个社会一旦拥有更多的土地 , 就会产生更多的人口 , 当人口多到一定程度 , 超过土地大小所能承载的极限 , 就会陷入[[马尔萨斯陷阱]] 。

      • 中华文明5000年历史上 , 这样的争战数不胜数 。 最终的胜者是那些发明出一种大规模动员人民的方式的社会 ,也就是政治组织形式比较完善的社会 。

        • 政治贤能制 ( Political Meritocracy )

          • 改变过去政治权力通过血缘关系来分配和传承

          • 秦国商鞅变法开创任人唯贤的制度

    • 海洋文明

      • 地理大发现

        • 欧洲发现美洲大陆的概率远远高于中国

        • 美洲的土地避免欧洲陷入[[马尔萨斯陷阱]]

      • 启蒙运动和科学革命

        • 经济贤能制 ( Economic Meritocracy )

        • 农业文明是由光合作用原理决定的 , 光合作用对能量转换的极限受制于土地的大小 。 土地的大小有自然的上限 , 因此农业文明的经济是短缺经济 。

        • 而以现代科学技术为基础的文明能够释放出持续的 、 复利式的经济增长的动力 , 将农业时代的短缺经济转变为富足经济 。

二 、 中国的现代化历程及近四十年的经济奇迹 ;

  • 现代文明的本质并非政治制度 , 而是自由市场经济与现代科学技术的结合 。

    • 中国的成功说明政治民主并不是现代化的先决条件
  • 中国独特的政治经济体系,三合一市场机制

    • “ 三合一市场机制 ” , 就是中央政府 、 地方政府和企业之间的密切合作 。

      • 中央政府制定战略,提供资源支持,调节经济周期。

      • 地方政府之间相互竞争,为商业公司提供总部式服务。

    • 三合一市场机制缺点

      • 当地方政府像企业一样提供商业服务时 , 它们会要求租金 , 有些官员甚至会以权谋私 , 要求企业直接把租金支付给个人 。

      • 因此 , 这种模式在创造了超高速经济增长的同时 , 也催生了严重的贪腐 、 寻租 、 环境污染恶化 、 不同地区之间的恶性竞争 、 不可持续的贫富分化 , 和高度依赖债务的经济 , 因为债务是中央政府用来缓和经济周期起伏的主要方式之一 。

  • 反全球化运动和各种民粹主义政治运动

    • 当中国成为世界第二大经济体 、 世界上最大的贸易国和最大的工业国时 , 其他国家和地区的经济没有达到9%的增速来适应这么多的产出 。

    • 全球化的结果之一是 , 那些原本发达的工业大国正在失去其工业上的优势基础 。 而全球化为发达国家带来的好处又集中地过度分配给了科技与金融领域中的精英们 , 贫富分化日益严重 , 中产阶级的生活水平停滞不前 。

三 、 当前投资人尤其是海外投资人对中国的悲观情绪 ;

  • 十八大以来的反腐运动两个目标

    • 通过全面从严治党来加强对整个国家社会的掌控 ;

      • 加强党的领导也带来了更加稳定的政府 、 稳定的国家 , 和稳定 、 持续 、 共同 、 单一的大市场 。
    • 为中国继续创造中高速 ( 相对于超高速 ) 的 、 可持续的经济增长 。

  • [[中美贸易战]]

    • 章家敦 ( Gordon Chang ) 2001年所写的 《 中国即将崩塌 》 ( The Coming Collapse of China )

    • [[供给侧改革]]降低中国经济对国外市场的依赖性,净出口占中国 GDP 的比例下降。

四 、 经济发展的三个不同阶段 : 今天中国与西方的位置 ;

  • 刘易斯拐点

    • 随着工业发展到一定的规模之后 , 农村剩余劳动人口从过剩变到短缺
  • 过了刘易斯拐点后,经济发展进入成熟阶段,黄金时代

    • 企业需要通过提高对生产设备的投资以提高产出 , 同时迎合满足雇员的需求 , 增加工资 , 改善工作环境和生产设备等等 。

    • 在这个时期 , 因为劳动人口已经开始短缺 , 经济发展会导致工资水平不断上升 , 工资上升又引起消费水平上升 , 储蓄水平和投资水平也会上升 , 这样公司的利润也会上升 , 形成了一个互相作用 、 向上的正向循环 。

    • 这个阶段中 , 几乎社会中的每个人都能享受到经济发展的成果 , 同时会形成一个以中产阶级为主的消费社会 , 整个国家进入经济发展的黄金时期 。

  • 刘易斯拐点的被追赶阶段

    • 企业人力成本不断上升,海外其他新兴经济会变更更加有吸引力,企业开始转移投资。

    • 这一阶段 , 经济仍然在发展 , 但是经济发展的成果对社会中的各个阶层已经不再均衡 。 劳工需要靠自己生存 。

    • 那些技术含量比较高的工作 , 比如科学技术 、 金融 、 国际市场类的工作回报会很高 , 资本的海外回报也会很高 。

    • 但是社会的总体工资水平会停滞不前 , 国内投资机会大大减少 。

  • 经济发展不同阶段政府宏观政策的作用

    • 在早期工业化过程中 , 政府的财政政策会发挥巨大的作用 , 投资基础设施 、 资源 、 出口相关服务等都有助于新兴国家迅速进入工业化状态 。

    • 进入到后刘易斯拐点的成熟阶段以后 , 经济发展主要依靠国内消费 , 处在市场前沿的私人部门企业家更能把握市场瞬息万变的商机 。 此时依靠财政政策的进一步投资就开始和私营部门的投资互相冲突 、 互相竞争资源 。 这一时期 , 货币政策更能有效地调动私营部门的积极性 , 促进经济发展 。

    • 到了被追赶阶段 , 因为国内投资环境恶化 , 投资机会减少 , 私营部门因海外投资收益更高 , 而不愿意投资国内 。 此时政府的财政政策又变得更为重要 , 它可以弥补国内的私营部门投资不足 , 居民储蓄过多而消费不足 。 反而货币政策在这一阶段会常常失灵 。

    • 但是因为政府的惯性比较强 , 所以常常当经济发展阶段发生变化时 , 政策的执行仍然停留在上一个发展阶段的成功经验中 。

五 、 中国经济的增长潜力 。

  • 工程师红利

    • 现代文明的基础是现代科技和自由市场经济的结合 , 与政治组织方式关系不大 。 而技术密度却与经济增长直接相关 。

    • 类似于之前的农业人口红利?

  • 城市化率

    • 新的城市化人口在获得社会福利后,会成为新的消费者。
  • 高储蓄率

    • 支持城市化、支持建设、支持制造业升级

    • 高债务水平

      • 中国以银行债务为主,股票市场及股权融资占整体融资比例很低。

      • 中国政府想做的就是通过资本市场改革从根本上改变中国的融资结构 , 大大增加股权的权重 , 减少债务所占比例 。

      • 资本市场改革将成为解锁高债务比问题和提高融资效率的关键 。

        • “科创板 ” 会采用与美国相同的模式 , 即以信息披露为基础的注册制资本发行 , 而非以前的审批制 。
  • 中国政府在处理重大问题 、 危机时的灵活性和实用性

    • 比如中国政府在中美贸易冲突问题上已经调整了与美国谈判的策略 , 也改变了之前对私营企业家的一些处理方式和对私营企业的借贷政策 , 尤其是在证券市场暴跌中对私营企业金融股权的处理等等 。
  • 东亚同样受儒教影响的国家 、 地区的发展历程对预测中国经济前景具有启发意义

与[[价值投资]]相关的看法

  • 关注对未来大概率正确的预测,分析尽量保持客观理性 , 摒弃任何意识形态及情感带来的偏见 。

  • 作为基本面投资人 , 我们为什么现在投资中国呢 ? 因为在那里我们仍然能够发现一些优秀龙头企业 , 它们比西方的同类公司更便宜 , 而且增长速度更快 。 这就是我们在中国投资的逻辑。

  • 我们是自下而上的投资者 。 我们的投资一般不受整体宏观环境的影响 。 今天我们之所以要讨论这些问题 , 是因为我们所投资的公司在某种程度上与它们所在国家的命运也是息息相关的 。 所以我们要对这个国家有一个粗略的认知 。 这种认知不一定要非常精确 , 也不需要时时正确 。 我们只需要对所投注的国家未来20年或30年的情况有个大致的推测 。 这就是为什么我们要做这些分析 , 为什么我们要思考这些问题 。


@中国未来20年的经济大趋势

[[Summary]] 地理位置不同决定中国和西方的发展走出不同的道路,政府在两种文化中扮演非常不同的角色。

一 、 中西方的历史文化差异 ;

  • 地理环境

    • 农业文明

      • 农业文明的基础是光合作用 , 它把太阳能转化成农作物和可畜养动物 , 而动植物都依赖土地 。 这就意味着土地的大小决定了农业产出和所能负担的人口数量 。

      • 在整个农业文明的历史中 , 土地的稀缺性是贯穿始终的主题 。

      • 某个社会一旦拥有更多的土地 , 就会产生更多的人口 , 当人口多到一定程度 , 超过土地大小所能承载的极限 , 就会陷入[[马尔萨斯陷阱]] 。

      • 中华文明5000年历史上 , 这样的争战数不胜数 。 最终的胜者是那些发明出一种大规模动员人民的方式的社会 ,也就是政治组织形式比较完善的社会 。

        • 政治贤能制 ( Political Meritocracy )

          • 改变过去政治权力通过血缘关系来分配和传承

          • 秦国商鞅变法开创任人唯贤的制度

    • 海洋文明

      • 地理大发现

        • 欧洲发现美洲大陆的概率远远高于中国

        • 美洲的土地避免欧洲陷入[[马尔萨斯陷阱]]

      • 启蒙运动和科学革命

        • 经济贤能制 ( Economic Meritocracy )

        • 农业文明是由光合作用原理决定的 , 光合作用对能量转换的极限受制于土地的大小 。 土地的大小有自然的上限 , 因此农业文明的经济是短缺经济 。

        • 而以现代科学技术为基础的文明能够释放出持续的 、 复利式的经济增长的动力 , 将农业时代的短缺经济转变为富足经济 。

二 、 中国的现代化历程及近四十年的经济奇迹 ;

  • 现代文明的本质并非政治制度 , 而是自由市场经济与现代科学技术的结合 。

    • 中国的成功说明政治民主并不是现代化的先决条件
  • 中国独特的政治经济体系,三合一市场机制

    • “ 三合一市场机制 ” , 就是中央政府 、 地方政府和企业之间的密切合作 。

      • 中央政府制定战略,提供资源支持,调节经济周期。

      • 地方政府之间相互竞争,为商业公司提供总部式服务。

    • 三合一市场机制缺点

      • 当地方政府像企业一样提供商业服务时 , 它们会要求租金 , 有些官员甚至会以权谋私 , 要求企业直接把租金支付给个人 。

      • 因此 , 这种模式在创造了超高速经济增长的同时 , 也催生了严重的贪腐 、 寻租 、 环境污染恶化 、 不同地区之间的恶性竞争 、 不可持续的贫富分化 , 和高度依赖债务的经济 , 因为债务是中央政府用来缓和经济周期起伏的主要方式之一 。

  • 反全球化运动和各种民粹主义政治运动

    • 当中国成为世界第二大经济体 、 世界上最大的贸易国和最大的工业国时 , 其他国家和地区的经济没有达到9%的增速来适应这么多的产出 。

    • 全球化的结果之一是 , 那些原本发达的工业大国正在失去其工业上的优势基础 。 而全球化为发达国家带来的好处又集中地过度分配给了科技与金融领域中的精英们 , 贫富分化日益严重 , 中产阶级的生活水平停滞不前 。

三 、 当前投资人尤其是海外投资人对中国的悲观情绪 ;

  • 十八大以来的反腐运动两个目标

    • 通过全面从严治党来加强对整个国家社会的掌控 ;

      • 加强党的领导也带来了更加稳定的政府 、 稳定的国家 , 和稳定 、 持续 、 共同 、 单一的大市场 。
    • 为中国继续创造中高速 ( 相对于超高速 ) 的 、 可持续的经济增长 。

  • [[中美贸易战]]

    • 章家敦 ( Gordon Chang ) 2001年所写的 《 中国即将崩塌 》 ( The Coming Collapse of China )

    • [[供给侧改革]]降低中国经济对国外市场的依赖性,净出口占中国 GDP 的比例下降。

四 、 经济发展的三个不同阶段 : 今天中国与西方的位置 ;

  • 刘易斯拐点

    • 随着工业发展到一定的规模之后 , 农村剩余劳动人口从过剩变到短缺
  • 过了刘易斯拐点后,经济发展进入成熟阶段,黄金时代

    • 企业需要通过提高对生产设备的投资以提高产出 , 同时迎合满足雇员的需求 , 增加工资 , 改善工作环境和生产设备等等 。

    • 在这个时期 , 因为劳动人口已经开始短缺 , 经济发展会导致工资水平不断上升 , 工资上升又引起消费水平上升 , 储蓄水平和投资水平也会上升 , 这样公司的利润也会上升 , 形成了一个互相作用 、 向上的正向循环 。

    • 这个阶段中 , 几乎社会中的每个人都能享受到经济发展的成果 , 同时会形成一个以中产阶级为主的消费社会 , 整个国家进入经济发展的黄金时期 。

  • 刘易斯拐点的被追赶阶段

    • 企业人力成本不断上升,海外其他新兴经济会变更更加有吸引力,企业开始转移投资。

    • 这一阶段 , 经济仍然在发展 , 但是经济发展的成果对社会中的各个阶层已经不再均衡 。 劳工需要靠自己生存 。

    • 那些技术含量比较高的工作 , 比如科学技术 、 金融 、 国际市场类的工作回报会很高 , 资本的海外回报也会很高 。

    • 但是社会的总体工资水平会停滞不前 , 国内投资机会大大减少 。

  • 经济发展不同阶段政府宏观政策的作用

    • 在早期工业化过程中 , 政府的财政政策会发挥巨大的作用 , 投资基础设施 、 资源 、 出口相关服务等都有助于新兴国家迅速进入工业化状态 。

    • 进入到后刘易斯拐点的成熟阶段以后 , 经济发展主要依靠国内消费 , 处在市场前沿的私人部门企业家更能把握市场瞬息万变的商机 。 此时依靠财政政策的进一步投资就开始和私营部门的投资互相冲突 、 互相竞争资源 。 这一时期 , 货币政策更能有效地调动私营部门的积极性 , 促进经济发展 。

    • 到了被追赶阶段 , 因为国内投资环境恶化 , 投资机会减少 , 私营部门因海外投资收益更高 , 而不愿意投资国内 。 此时政府的财政政策又变得更为重要 , 它可以弥补国内的私营部门投资不足 , 居民储蓄过多而消费不足 。 反而货币政策在这一阶段会常常失灵 。

    • 但是因为政府的惯性比较强 , 所以常常当经济发展阶段发生变化时 , 政策的执行仍然停留在上一个发展阶段的成功经验中 。

五 、 中国经济的增长潜力 。

  • 工程师红利

    • 现代文明的基础是现代科技和自由市场经济的结合 , 与政治组织方式关系不大 。 而技术密度却与经济增长直接相关 。

    • 类似于之前的农业人口红利?

  • 城市化率

    • 新的城市化人口在获得社会福利后,会成为新的消费者。
  • 高储蓄率

    • 支持城市化、支持建设、支持制造业升级

    • 高债务水平

      • 中国以银行债务为主,股票市场及股权融资占整体融资比例很低。

      • 中国政府想做的就是通过资本市场改革从根本上改变中国的融资结构 , 大大增加股权的权重 , 减少债务所占比例 。

      • 资本市场改革将成为解锁高债务比问题和提高融资效率的关键 。

        • “科创板 ” 会采用与美国相同的模式 , 即以信息披露为基础的注册制资本发行 , 而非以前的审批制 。
  • 中国政府在处理重大问题 、 危机时的灵活性和实用性

    • 比如中国政府在中美贸易冲突问题上已经调整了与美国谈判的策略 , 也改变了之前对私营企业家的一些处理方式和对私营企业的借贷政策 , 尤其是在证券市场暴跌中对私营企业金融股权的处理等等 。
  • 东亚同样受儒教影响的国家 、 地区的发展历程对预测中国经济前景具有启发意义

与[[价值投资]]相关的看法

  • 关注对未来大概率正确的预测,分析尽量保持客观理性 , 摒弃任何意识形态及情感带来的偏见 。

  • 作为基本面投资人 , 我们为什么现在投资中国呢 ? 因为在那里我们仍然能够发现一些优秀龙头企业 , 它们比西方的同类公司更便宜 , 而且增长速度更快 。 这就是我们在中国投资的逻辑。

  • 我们是自下而上的投资者 。 我们的投资一般不受整体宏观环境的影响 。 今天我们之所以要讨论这些问题 , 是因为我们所投资的公司在某种程度上与它们所在国家的命运也是息息相关的 。 所以我们要对这个国家有一个粗略的认知 。 这种认知不一定要非常精确 , 也不需要时时正确 。 我们只需要对所投注的国家未来20年或30年的情况有个大致的推测 。 这就是为什么我们要做这些分析 , 为什么我们要思考这些问题 。


@互联网大厂推荐算法实战

想法

  • 作者知乎上面的文章合理,值的一看,用心的是书中所有的图都是统一的风格绘制。

阅读记录


@人类简史

英国科技革命,欧洲 1850 开始的优势

中国无法赶超的原因是关于整个社会的想法和组织不同。

之前社会发展的动力:宗教、帝国、金钱

科技革命和工业革命之后:科学、帝国、资本

地理大发现之后世界的发在,科学在帝国和资本的帮助下,世界变得更加一体。但是没有变得更好。

饥饿、疾病、战争

一、超越死亡

二、全球的幸福

三、人类取得神一般的创造力和毁灭力

[[Ref]]


@互联网是人类历史的一段弯路吗

造富神话背后,互联网的那些阴暗面 - 少数派

  • 1 、并未缩小的社会格差

  • 2、在泛滥的信息汪洋中只取一瓢饮,让人性的弱点凸显

    • 一是过度关注自己在鄙视链中的位置从而深陷焦虑漩涡

    • 二是移动互联网+智能算法带来世界越来越坏的错觉。

  • 文章结构

    • 至暗时刻

    • 未被兑现的承诺

    • 元叙事的倒掉

    • 迈入风险社会的最后一步

    • 相信希望,而不是幻想

互联网是一种集权技术吗?

一种是完全由无形之手也即自由市场所主导的西方模式,另一种则是由强监管、强准入、强管理主导的东方模式。最终到集权、矮化公民为消费者、侵犯隐私这一终点。

如果产品是免费的,那么你就是商品。

互联网广告的竞争优势是利用用户隐私

企业提供互联网服务也有边际效应

更多的近似于美国 1998 年制定的《数字千年版权法案》(DMCA法案)中避风港原则所描述的内容,其大致为:互联网服务的提供者如不知晓用户的行为侵权,则在侵权案件中可以免责。

红旗原则是指:只有在互联网络服务提供者不明知或者不应知晓自己所传播的信息属于侵权信息或者链接的作品、表演、录音录像制品是侵权作品的情况下,才能适用避风港原则免于处罚。

技术中立代表:bittorrent

早在 1964 年麦克·卢汉就已经在其最重要的著作《理解媒介》中描述过“媒介即信息”——媒体天然具有意识形态。

苹果公司开启的是自苏联解体以来,人类消费科技的最后一个技术奇点。在 iPhone 面世的 10 年里,再没有一款产品,像智能手机那样彻底改变我们的生活、工作甚至是社会运作方式。

技术变革评价标准:技术裂变能力以及技术普及能力。

互联网危机诞生于行业给社会带来的刚性福祉放缓

在复杂经济学创始人布莱恩·阿瑟所著的《技术的本质》一书中,将技术定义为“有目的捕获并利用现象的方法”。并因此,组合被视为技术进步的重要来源之一,它就像是我们用乐高搭建一个物品——我们需要有轮子、传动装置,才能构建车。

网络普及加大信息格差

互联网对全球的链接构成利用信息格差进行剥削的基础条件

  • Facebook 和 Google 可以轻易的收割欧洲用户的注意力,并产生经济价值,而这些价值最终却主要流向其它地区不是在欧洲本土。无论这是否是互联网公司的原意,但这客观上构成了数字时代的新型经济殖民,削减欧盟诸国社会福利的资金来源,而欧盟境内的国民却很难注意到这一点。

在相对狭小的舆论环境中,更有理的人更容易“声量大”;而在绝对开放环境中,则是谁的声量大谁“更有理。”

广场式社交媒体第一次赋予了个体侮辱一整个群体中每个个体的能力。

千人千面的算法会加剧人们的偏见和固有印象。为读者呈现它想看到的东西,并告诉他这就是全世界。加剧人以群分。

互联网从一扇通向世界的窗口,变成一个善于美颜的镜子

当人们获取资讯的方式从主动订阅、搜索,变为被动的“下拉刷新”的时候,互联网便不再是一扇通向世界的窗口,而只是一个善于美颜的镜子。

元叙事一套叙事结构(亦或话语体系),试图对人类过去、现在及未来的全部社会活动给出正确答案。

[[@人类简史]] 中将人类最伟大的能力归结为“创造和相信虚构故事”的能力。

这便是元叙事存在的意义,一个虚构的美好故事,让我们能够跨越时间空间为之努力,并使得彼此陌生甚至有一定利益冲突的群体之间形成合作。尽管我们可能永远达不到童话故事中所描述的 Happy ever after,但这并不妨碍所有人都在这一过程中收获一些好处。

二战后美国实现不生产一针一线亦能控制全球的能力,新型的以美元为工具的剪刀差,使得跨区域的剥削和经济殖民不再变得血腥。

元叙述反性

网络放大恐惧 网络的精确记忆和广泛传播,使得信用受损的影响与速度远远超过以往时代。

  • 传统出租车和滴滴的安全性

一个清析定义且具有强大控制力的道德标准会在各种维度上阻碍人类社会的进步。

如库克所说,“我并不担心机器像人类一样思考,我担心的是人像机器一样思考”。利用技术手段精确执行某种当下的道德,即是让人像机器一样思考。

新的模式在初期存在不用遵守旧的规则的优势,但是当企业开始受到监管和法律的约束,并履行其应承担的责任时,其营业成本必将上升并转嫁至消费者。

技术特权回收期现象:个体福祉在下降,而社会福祉却在上升。


@垄断的困境

传统谈及全断与反垄断,往往涉及三个领域:经济, 法律和公共治理。但这三个领域建立的 “全断一反全断”框架均诞生在 “羊毛出在猪身上”这种互联网行业的基本支付转移手法出现之前。

  • 我们先简单概括一下这三个领城都是怎么定义奎断和反垄断的:

      1. 在经济领域,垄断与反垄断围绕全断竞争对产品价格的影响进行讨论。它考量的是垄断企业能在多大程度上影响商品的价格,这种价格是否完全背离市场规律或价值规律,以及这种价格如何影响供需关系。它的博弈双方是企业与消费者。
      1. 在法律领域,全断与反全断围绕企业对市场竞争环境的影响进行讨论。它考量垄断者对竞争者的不正当扼杀和对创新的抑制,博弈双方是企业与企业。
      1. 在公共治理领域,垄断与反垄断围绕垄断企业对税收、公共福祉和政治势力的影响讨论。其博弈双方是企业与社会(或国家)。
  • 上述三个领域对全断企业、全断行为、奎断边界和反垄断方法各有一些分歧和共识。但用“互联网黑话”来说,传统框架甚至没有很好地在互联网领域找到好的“抓手”——互联网服务的商品究竞是什么,价格是什么,市场是什么。如果连这些都尚未明晰,那么套用传统的、以钱易物的商业逻辑下形成的“垄断一反垄断”框架,必然出现问题。

无效垄断

  • 从这个财务状况来看,无论滴滴是否垄断,它到目前为止都尚末达成资本所要形成的 “有效”一—赚钱。

  • 在互联网领城,仅仅凭借复制或借鉴,在几乎没有关键性壁垒的情况下就可以对已有的垄断市场进行破坏。这是传统垄断行业或者说原子经济时代不具备的新特性。这也导致了无效全断的其中一种:无壁垒垄断。

  • 无壁垒垄断的定义很简单:市场上某个企业拥有较高市场份额,原因是它的竞争对手不想与其竞争,而非不能与其竞争。

  • 自动驾驶

    • 相比起建立一个个区域性的网约车市场,自动驾驶出租车显然是一个能构筑起垄断门槛的业务。

    • 有两派商业势力在争夺自动驾驶交通业的市场,一派是代表旧生产关系的网约车平台,另一派是代表新生产工具的车企。

    • 在从 2020 年到 2040 年之中的某个时间点里,生产关系派很可能会发生内部斗争,阻碍其对新生产工具的运用。

    • 网约车平台整体是轻资产模式,其最重要的外部资源是网约车司机这种 “传统运力”,它的意义就像用户之于微信。全面进军无人驾驶出租车,会在一个特定的时间点破坏平台与长期合作群体之间的友好关系,造成难以调解的冲突,就像网约车出现时出租车司机对网约车平台的抵制一样。而对于2040年的车企或新诞生的以自动驾驶技术为核心的新运力平台来说,则没有这种“历史包袱”,可以轻裝上路快速增长。如果特斯拉的L5自动驾驶成熱了。它可以迅速组建一个自动驾驶出租车公司。但Uber即便是在拥有同样成熱的自动驾驶技术情况下,也要面临如何遣散数百万网约车司机而不引发社会事件的问题。

中国互联网的第一起屏蔽

  • 2008年9月8日 下午,上线五年、初具规模的淘宝网宣布了一项新的“消费者保障计划”。这项消费者保障计划中包括:对家电类产品要求商家提供三十天保修、珠宝类商家保真、食品类商家进行资质审核、奢侈品商品延长确认收货期给消费者留足监定时同,以及 “屏蔽搜索引擎对淘宝网商品、商家和淘宝除首页外页面的收录”

    • 简单来说,用户从此时开始,将再也不能从搜素引擎,包括尚末退出中国的谷歌、雅虎和本士搜索引擎百度中找到来自淘宝的绝大部分页面。其中对百度的屏蔽是最为严格的,几乎除了首页,淘宝任何页面都不会出现在百度的搜素结果中。
  • 都说互联网是一门“流量” 的生意,但流动的量实际并不能为互联网公司带来实际的商业价值,只有留下的量,才能真正维系互联网产品的正常发展。因此,与滴滴的无壁垒生断相比,淘宝实际上建立了一种广告市场中的有效生断。

社交垄断能起到的作用比想象的要小得多,局限性也比想象的大得多。

  • 垄断是社交网络体验的一部分。

平台经济是指通过创造一个平台,来撮合那些原本因为交易成本而无法达成的交易。

  • 网约车平台没有对供需关系的本质改变,也没有凭空创造此前不存在的市场。

  • 先决条件,产业链条本身要足够短,或是交易链条可以被互联网技术抹平。

    • 大飞机零件供应商有限,无法形成一个供应链平台。
  • 平台经济的规模会受制于交易成本的限制

企业垄断的唯一目的,是为了赚钱。

  • 垄断是企业赚钱的手段,而不是目的。但在过去十么的互联网领城,有不少的企业都陷人了本末倒置的境地。

  • 为什么“垄断了市场,还能不赚钱”,因为垄断一个并不存在的市场并不是真正的全断。

有效垄断和无效垄断

  • 一、任何在短期和长期均无法赚钱的垄断,都应破视为商业上的无效垄断。

  • 二、有效垄断,应当建立在一种可行的商业模式上。

在经济学上一般认为存在四种市场结构,分别为完全垄断市场、寡头垄断市场、垄断竞争市场、完全竞争市场。

信息流业务平台

  • 人工智能和互联网技术仅仅降低了内容的分发门槛,并未显著降低内容的创作门槛。

  • 信息流业务的边际成本并不是简单的服务器带宽成本,而是随着读者规模扩大后,全网的优质内容生产成本。

资本的无序扩张与无效垄断

  • 为什么会形成无效垄断? 这个答案非常无聊,因为我们己经看到这个答案很多次了:资本的无序扩张。

  • 用企业和资本在鼓吹创业时所说的话术是,风口就是连猪都能飞起来的时机和赛道。但问题是,风口并不应当是一种起点思维,而是一种终点思维。当把一只猪送上天空的时候,预期的是它能在山顶平安降落。而不是不管山是否存在,都先把猪往上吹再等它掉死。( 这里讲一个许多人应该知道的小知识:中国的互联网公司之所以青睐美股,是因为美股没有太多的盈利要求,一家企业即使亏损也可以在境外上市。)

无限游戏是一种计划经济

  • 企业是市场经济中最基本、最主要的市场活动主体。在参与市场竞争的过程中,企业外部的行为往往会遵循价值规律和市场经济的逻辑。但对于绝大多数企业来说,企业内部遵循的是计划经济。要解释这一点,我们需要先去了解一下《公司的本质》,这是英国著名经济学家科斯在1937年发表的论文。

    • 在一个纯粹的市场经济中,企业应该是不复存在的,但为什么企业还是出现了?

      • 科斯指出,企业的本质是一种非价格的统筹机制,企业管理制度和企业家代替了更细微的交易的发生,来协调经济的生产。而之所以这种替代会发生,是由于交易成本的存在。即每达成一次交易,除了服务与产品的实际价格,还要考虑促成交易本身所产生的成本。

      • 交易成本是決定企业规模的重要因素。交易成本大抵是指使得交易成立的一种额外成本,由于这些交易成本的存在,对于一个稍大的企业来说,办公区里的打印机一定是行政配套设施之一,绝无可能让自己的员工为了打印资料而每天去外面的打印店。

      • 企业会将那些维持企业自身运转所必需、且交易成本过高的外部业务内部化,直到它到达—个临界规模。这一临界规模被称为科斯天花板,亦即衡量企业规模极限的值。

      • 此时,在企业外仍是市场经济,但在企业内为了抹除交易成本,它执行的是计划经济。

  • 了解这个框架之后,你可能已经想到了平合经济领域的违和之处:平台经济是企业的半开放子集,它由企业进行管理但需要大量的外部参与者 (几乎是99%),但大多数特有平台的企业仍在遵循计划经济模式运营平台中的二级市场。

  • 我们的商业分析类媒体似乎从来没有发現过这个矛盾点,一方面商业媒体普遍认可近年来互联网公司得以高速发展的原因之一是政府— “看得见的手”——在这一领域动作并不明显(没有太多管制性干预);另一方面又热衷于分析互联网企业与平台的公司战略或平台战略如何取得成功。但企业战路和平台战略,对于平台内的“小市场”来说是 “看得见的手”。看得见的手在这个领域表现的,远比看不见的手要强大得多。

  • 鼓吹“无限游戏。本身,就已经落入了计划经济学家的集白,因为这种分析将一个市场的繁荣完全归功于顶层设计而非自然规律,这是一套连政治经济学派都不再相信的方向。

  • 承认任何企业都只能进行有限游戏,并意识到无限游戏带来的并不是更高的效率,而是规模不经济,是解决无效垄断的大前提。

无效垄断的无效正是源于其对创新的无法防御。

  • 个人内卷实际上源自行业的内卷

    • 互联网行业内部端的996,主要作用不是创造新的价值,而是为了抹平对方的价值。

好垄断

  • 中国铁塔公司,通信基建。

通过计算垄断的成本收益来衡量互联网企业的垄断是否合理。


@天空之城:拉马努金式思维训练法

[[拉马·努金]]一位来自 印度 的数学天才,凭借直觉和灵感产生几千个数学公式,经过验证大部分公式是正确的。
卡尔 纯粹数学与应用数学概要,有结论但是没有详细证明 #card

  • 通过用自己的方法去重构或者重新证明一些已知问题或结论。

机器学习中的拉马努金式思维训练法 #card

  • 首先,看一下论文的标题,你能否从论文标题猜出作者要解决什么样的问题?能否从论文标题大致猜出作者用的什么方法?

    • 如果上面两个问题的答案是肯定的,那么你可以试图恢复作者方法的细节信息,或者自己提出自己的重建方法来解决这个问题;

    • 如果答案是否定的,那么请去看论文的摘要,那里会给你提供更多的信息,再次回答上述两个问题。

  • 如果看完摘要,两个问题的答案依然是否定的,那么可以去看下论文里面的方法图示,之后再次问自己上面两个问题。

  • 如此迭代,像慢慢拼出一副拼图一样,逐步释放给自己更多信息,争取让自己用最少的信息量重建出作者的方法,或者根据已知线索提出自己的解决方法。

  • 然后,到了这一步,你一定已经尝试着猜测着去恢复出你认为作者使用的方法,或者提出了自己的方法。此时你可以去论文里大致看下你猜的对不对,如果猜的不对,问自己下列问题:

    • 你的方法和作者的方法有什么不同?

    • 各自的优点缺点是什么?

    • 哪个更好些?

[[@Item2Vec: Neural Item Embedding for Collaborative Filtering]]

  • 标题 #card

    • 使用神经网络训练 Item Embedding

    • CF 使用 Rating Matrix 数据

    • 分析可能的技术方案

      • 无监督方法

        • 用 word2vec 训练 item embedding
      • [[Triplet Loss]]

        • <item1+,item2+,item-> item1 和 item2 来自同一用户序列中里的商品,item- 为随机选择负例。item1 和 item2 的分数要高于 item1 和 item- 的分数
  • 摘要#card

    • [[Abstract]]

如何判断哪个工作有价值? #card

  • 首先,先看实验部分,如果效果有特别明显的提升,那么这篇论文绝对是值得看的,无论它的方法是简单还是复杂;

  • 而如果效果有提升但是幅度不是很大,我觉得这种工作可看可不看,可以加上一个辅助判断。

    • 辅助判断是:如果方法比较复杂(除非整个思路框架非常新),建议直接扔了不看,有这时间不如去听会歌放松放松,我估计这不会给你的知识更新带来任何损失;

    • 而如果方法比较简洁,那么看你心情,心情好就看,心情不好就不看。

    • 怎么样,这个标准还是很随性很好执行的吧?不用谢。

[[知无涯者]] 拉马努金在英国处境不佳,一直急于发表自己的两部公式笔记,以期待因此能得到人们的肯定。 #card

  • 哈代把拉玛努金拉到莱恩图书馆,指着一排排陈列整齐的书籍对他说:“人这一生获得荣誉的方式有很多种,对我们来说,被选为院士就是一种。但在我看来,如果在我们离世之后,能在莱恩图书馆里,留下一笔遗产,才是最伟大的。这里有《保罗书信》,米尔顿的诗文,有《摩根圣经》,它们都很伟大,但在我这个搞数学的人看来,最重要的一部还是牛顿的《数学原理》。牛顿的著作是这个物理世界的代表,而你的笔记是数学抽象世界的代表,牛顿也花了很长时间来证明自己,因此我们才有义务要把这些证明出来。一旦我们成功了,我相信总有一天,这些笔记在这里会有一席之地。”

[[@刻意练习]] 中提到需要有一位教练,但是在现实中很难每一件事情都能找到指导你的人。作者提出的努马拉金方法给你提供一次对答案的机会。#card

  • 很想之前做作业,然后对答案的过程。

  • 监督学习

  • 假设,建模,求解,优化


@我们到底为什么要做一个诚信的人?

功利主义:我之所以遵守诚信原则,是因为 :-> 规则能给我带来好处。

  • 批判观点 :-> 结论不稳定,过于灵活
    道德主义:我之所以遵守诚信原则,是因为 :-> 诚信原则是对的。
  • 对这个观点的批判 :-> 过于教条,过于僵化。
    正义在永恒中一定能带来好的。

道德功利主义::-> 一个追求功利主义的结果是否符合道德主义。
纯粹的功利主义一定会导致 道德相对主义 :没有什么绝对是对,什么绝对的错。

  • 相对主义是一切罪恶的源头。

  • 善与善之前有冲突。情境主义保持道德主义的判断。


@我的笔记法(借助 Zettelkasten 和 Obsidian)

专业知识笔记

  • 「XXX知识点」

  • 需要单独研究,新建空白笔记。

人文知识笔记

  • 如何解释名词和概念,从阅读中获取新的认知。

  • 不同人对同一个主题的观点是什么?

  • 以[[极权主义]] 为力,我从不同的书中,看到不同的作者对其的描述。

    • 在 [[201912211716-艾希曼在耶路撒冷]] 中,[[汉娜阿伦特]] 说极权主义是,「把个人变成职能行使者和统治机器上的齿轮,将人非人格化处理的制度」

在 [[极权主义的起源]] 一书中,[[汉娜阿伦特]] 更进一步归纳为「极权主义就是将世界上的所有界限抹平,不考虑人的多元性,将人认为是集体中的一员来对待。」
而在 [[历史的终结与最后的人]] 一书中,[[弗朗西斯·福山]] 将近现代国家发展出来的一种有着史无前例的权力的中央制度称之为极权主义。

Zettelkasten

  • 一条笔记只记录一个相关

  • 通过关键字和其他笔记链接

总结

  • 这两年来我越来越意识到我的问题并不是看得东西不够多,而是往往不能理解我所看过的东西。

    • 一方面来随着时间的推移会忘记,

    • 一方面当阅读的时候无法理解所看到的东西时,记忆也就没有那么深刻了。

  • 所以我之后的目标之一便是我要能理解我写下的东西。


@特朗普能走多远

特朗普

  • 有行动力的传统白种上等贵族

  • 触及民众真实需求

希拉里:民主党

  • 男性精英主义

  • 拜登

杰布布什:共和党

避免媒体牵引方向,媒体的报道做为你的材料,研究他的倾向得出结论。

  • 候选人排名顺序

美国总统选举的白马是什么?为什么是黑马

美国总统选举的局是什么?搅局是什么?

选举人行为,应该遵循什么那些标准?谁说了算?

谁对美国的政治人物更加了解?

美国是谁的美国

  • 黑马是美国政治制度纠错的过程

我们有关美国的知识,体验,标准从哪里来的?

哪些是思考美国问题的正确方式

  • 从书本出发

  • 经济基础决定上层建筑

  • 生产力决定生产关系

  • 客观存在决定主观认识

中国党派 人民党,美国党派 精英党,没有基层组织

民主党候选人

  • 党员一人一票

  • 每个州有一个超级代表,一个人一千票。精英控制平民的冲动,防止产生社会主义

  • 不会出标准的民主候选人

  • 民主的起源:[[Aristotle]] 政治学

    • 政体分为常态和变态,民主和共和
  • 精英民主主义捍卫者

共和党极度保守主义意识形态

少数人的政治

[[@21 世纪资本论]] [[资本论]] 问题的本质:在经济,在收益分配,在生产方式,在生产方式变迁带来的社会政治后果。

如何对数据进行一定的解释

关心议题:经济、移民(有效政策不足)

  • 使用礼貌的词去讨论移民政策是第一步,有效的政策供给不足,给特朗普无厘头的方案带来机会。

民主失能?

  • 制衡政府而不是瘫痪

系统性培养政治冷漠

  • 过度娱乐化媒体

  • 选举人花边新闻

  • 西方选举变得俗不可耐

霸权:实力、规范与观念

  • 塑造知识,影响全球青年观念。认为特朗普不能当上总统

  • 中国应该崩溃

    • 什么时候认为 GDP 不重要的声音出现?中国超过日本

      • 1949后的中国制度优越于明治维新的日本

      • 西德和日本 GDP 超过苏联,所以要改革

      • 修改 GDP 统计口径

    • 意识形态和政治无处不在

  • 收益在国内的分配,成本在国内的分摊方式。美国霸权在全球的收益和成本,在国内的分配因为资本主义制度被扭曲了。正确方式:超额利润部分补贴民众。现实:宣扬中国使用低人权劳动成本抢走了你的工作。政治听从资本。

    • iphone 在国外生产,获得的收益归属于资本,但是普通民众需要承担工作机会的流失。

    • 占领华尔街,阶级意识

    • TikTok 转移国内压力?

  • 新自由主义对媒体传播规范,以及新媒体空间解释框架与政治审美塑造能力,在全球有较为长足的发展。建构-塑造-规训

    • 精巧的统治体系

    • 操作系统发展趋势:人与硬件越来月隔离。

    • 媒体离开问题的本质,通过感官寻找解决方案。

经济分配:

  • 5% 充分就业:有就业意愿的人都有工作。

  • 金融危机之后,就业质量下降。救市政策,中产阶级承担成本。

  • 加剧两极分化,对金融资本极度不满。资本通过资金控制传统的白马。

  • [[民粹主义]]:任何试图无条件满足民众需求的政治主张。迎合中下阶层。不具备可持续性。

    • 抵消社会主义宣传

认知:个体层次的理解

  • 政治正确与被规训,塑造中产阶级审美观

    • 信仰的市场经济原教旨主义崩溃

    • [[基督山伯爵]] 欧洲富豪

      • 地主:有自己产业

      • 中世纪流传下来的家族统治

      • 暴发户:笼罩在蒸汽中的一列火车头。有资产泡沫

    • 中产阶级资产来源:储蓄性资产、房子固定资产、投入的资本性收入(理财工具破灭)

    • 对收入或地位低于自身的民众的本能恐惧。多数暴政。

      • 有没有相同的情况?

      • 社会的理想模式应该是什么?正确的社会价值趋向是什么?

    • 如何驯服资本?放任资本会带来整个社会的毁灭。资本在哪里能获得更多的剩余价值。希望在道德-信仰体系克制,政治行为能力的匮乏,与政策审美标准的异化 。

      • 大而不倒,金融资本对国家的绑架。

      • [[消费主义]] 手机?

      • 经济周期基本规律:繁荣-危机-衰退-萧条

      • 左翼思潮为什么会失败?

关注特朗普现象所代表的美国政治结构的深层变化是什么?

更加自主的去进行思考,而不是满足于媒体提供现成的答案。

思考这些问题的标、立场:

  • 对于中国:希拉里(人权意识形态和价值观)上台短期阵痛,长期利好,特朗普上台短期轻松中期不利,其实现在已经有所变化了。目前来看,都是短期阵痛,长期利好。

    • 中国国家利益

    • 中美关系冲突或者合作

  • 全球收缩,放松同盟军事管制


@知识资产:从一张卡片开始积累

知识资产

  • 是指一个人获得教育,技能和知识等资源的机会。比如学位证、专利著作或者举止习惯。

知识管理

  • 帮助我们更高效的获取、组织和有效利用知识的一套流程

[[知识管理的误区]]:囤积癖、墙头草、工具控、输出怪

本书分享记笔记的三种方法

  • 用自己的话记笔记

  • 用标签为笔记分类

  • 通过回顾持续刺激

卡片笔记的四个特点

  • 原子化

  • 标准化

    • 指用一套标准方式进行记录,确保笔记和笔记之间的格式,连接方式,分类方式相同。
  • 网络化

  • 动态化

    • 定期整理和维护笔记

[[Dozen/如何复盘]] 《陈云文选》关于如何才能少犯错误的主要方法可以概括为三个: 交换比较反复

  • 交换 #card

    • 交换正反两面意见,让自己的视角更全面。

    • 值得注意的是,收集反对信息后,如果这些信息正确就改进,如果错误就驳倒。

    • 只有这样,一个人的认识才能更接近客观事实。

  • 交换是为了 更全面地认识事物 ,比较则是为了更好地 判断事物的性质 ,用来了解事物的发展程度、要害和本质。

  • 重复上面两步,既是 认识 的过程,也是 实践 的过程。在此过程中,坚持 正确的 ,改进 错误的
    高亮后如何自我提问,增加笔记的摩擦力

  • 问问我为什么感觉不错

  • 问问自己将来能在哪里用;

  • 问问自己是否见过或做过类似的事情。

  • “这个观点和传统观点有什么不同”

  • “我对这个观点有什么疑问”

  • “这个方法适用于什么场景下的什么问题,不适用于什么场景下的什么问题”

如何记录情绪 [[Life Log]]

[[记录自己的实战经验]]

精练笔记

  • Light 对邓小平时代的精练笔记

    • 什么是“实事求是”? #card
      • 摆脱意识形态的束缚;

      • 承认令人不快的事实;

      • 实践是检验真理的唯一标准。

[[Q - 笔记需要分类吗?]] 分类是让自己更容易找到信息,适合自己的分类是从笔记中生长出来的。

  • 分类的目的是什么?答案很简单,分类是为了让“自己”更容易找到信息,而不是别人。换句话说,对于别人来说有用的分类方式,可能对我们自己并不适用。

  • 到这里你可能觉得有点[[反常识]]。的确,过去提到标签或分类,我们总觉得应该借鉴某种客观的分类体系,然后把笔记都分门别类地放进去。就像在盖图书馆之前,我们就应该知道分成多少区域,在盖医院之前,我们就应该知道分成多少科室一样。

  • 但前面的案例告诉我们:

    • 第一,不要机械照搬外部的分类,因为这并不符合你自己的提取习惯——就像大多数人不会根据图书馆的分类方式来整理自己的书架。所以大胆一些,根据你的主观需求为笔记打标签就好。

    • 第二,不必试图一次性规划好标签分类体系,而要允许它自然生长出来。刚开始打标签的时候,或许你会觉得有点乱。但是别担心,你的标签体系会随着认知加深而逐渐生长出来。

基于[[PARA]]设计出[[IARA]],把笔记分为个人的领域、兴趣、项目、归档四大部分。

  • 项目中关键信息需要和其他人同步,更适合记录在公司内部的协作软件中。个人笔记记录自己的思考、决策和结果,用来沉淀有价值的经验。

怎样更好的回顾记录?

  • 每次记录新的笔记时,重新熟悉相关的笔记,然后再记录新的内容。 #card

    • 望岳投资南添的例子,假设他要记一条有关电动车领域的笔记,正式记录前他会点开对应的标签,翻看此前关于这个领域的笔记,思考即将记录的内容和之前记录的内容是否有冲突或关联。这样回顾的好处是,他不但可以加深对相关笔记的印象,还能快速建立起笔记之间的连接。
  • 同步思考一些问题 #card #incremental #depth-1

    • 这条笔记和我最近遇到的什么问题有关? #card

      • 我早期读企业家谢家华的自传《三双鞋》,做了很多笔记。某次我回顾到下面这条关于“客服”问题的笔记,同时也在想,这跟我最近遇到的什么问题有关?
    • 关于这条笔记,我可以补充什么新实践或新思考? #card

      • 下面这条关于时间管理的笔记,是我某次听播客时记录的。之前我做事总是容易失焦,导致重要的事情得不到及时解决,所以后来我干脆买了一堆便笺贴在墙上,确保自己一到办公室就能看到近期重点项目的重要节点。回顾这条笔记时,我把自己的这些实战经验补充在了后面,促进理解,加强记忆。
    • 这条笔记和其他哪条笔记有关系?
      待整理

  • 如何提出有价值的问题

  • 重要的不是答案,而是一个好问题。而所谓“好问题”,其实源于你自己,源于你的经历、你的偏好、你的期待、你的兴趣……只有拿着自己的真实问题去搜集信息,才算掌握了获取信息的主动权。

  • 2024-01-01 09:24:02

  • [[项飚对于工作意义的定义]]

  • 2024-01-01 09:24:49

  • 主动监控,保持质疑

  • 2024-01-01 09:25:01

  • 方法一

  • 获取优质信息的第三条原则叫作:主动监控,保持质疑。它的意思是,对于搜集到的信息,无论是书里的名言也好,还是专家的建议也好,我们都不要被动地默认接受,而是要主动在大脑里增加一道监控程序,对它们保持质疑。

  • 你可能觉得,这个建议说起来容易,做起来难,毕竟我们注意力有限,不可能监控所有信息。针对这一点,我有个小技巧分享给你,你可以提前设置一些“触发词”,重点监控这些词语,比如“绝对”“肯定”“一定”“永远”“所有”……当这些“言之凿凿”的词语或语气出现的时候,你就要多问一句:“真是这样吗?”让自己重新审视信息。

  • 2024-01-01 09:25:26

  • 除了提前设置“触发词”,如果你想更进一步,我还有第二个技巧分享给你。面对来自他人的经验,你可以设置一个监控问题:这个经验的完整逻辑是什么?适用场景是什么?只需多问一句,你就有可能收获完全不同的信息。

  • 一个典型使用场景是金句。比如,巴菲特有句著名的话:“别人贪婪时我恐惧,别人恐惧时我贪婪。”这句话有道理吗?有,逆向思考往往有意外收获。但它适用于所有场景吗?并不。因为别人贪婪并不意味着高估,别人恐惧也不代表着低估。如果我们只是记住这句话,然后据此去投资,大概率也是血本无归。

  • 而如果我们能多问一句:这个经验的完整逻辑是什么?就可能得出如下答案:

  • 1.价格(市场情绪)和价值是两个独立值;

  • 2.市场情绪往往极端演绎,于是价格也总是偏离价值;

  • 3.当市场情绪极端时,不妨试试逆向思考,或有机会;

  • 4.别人的贪婪和恐惧,只是一种信号,而非标准。

  • 你看,在他人分享的经验里,通常隐藏了许多背景信息及其适用场景。因此,我们不妨多问一句,获取更多有价值的信息。做到了这一点,我们就不会止步于看似深刻的金句或经验,而是能够主动切换场景,不断跳出自己的立场,降落在粗糙的地表上,看到其他视角的考量,从而打破信息茧房。

  • 2024-01-01 09:29:43

  • 学习观里面类似的是什么

  • 削减利用你情绪的信息源

  • 第一个方法叫作,削减利用你情绪的信息源。

  • 什么是“利用你情绪的信息源”?比如,“震惊!会被 ChatGPT 取代的 30 个岗位,其中有你的吗?”类似这种标题的信息,我们每天或多或少都会看到一些。

  • 2024-01-01 09:30:22

  • 削减让自己过于舒适的信息源

  • 除了削减利用你情绪的信息源,削减信息源的第二个方法叫作,削减让自己过于舒适的信息源。

  • 这一点是我们从好友 Mien 身上获得的启发。有一次和 Mien 聊天,她说她会取关一些让自己读起来很舒服的公众号。这让我们很好奇,既然读得舒服,那就继续读呗,为何要取关呢?

  • 她回答说:“觉得舒服,意味着这些内容或观点你已经很熟悉了,但同时也意味着没有增量信息,只是情绪按摩。如果接触的信息源都是让自己很舒服的,那么长期下来,我们就会疏于关注舒适圈以外的信息,培养出某种惰性。”

  • 2024-01-01 09:31:10

  • 对于做笔记方法类笔记的排斥,大部分原理都知道,没有找到合适自己场景的方法

  • 怎么识别“让自己过于舒适的信息源”呢?一个简单的办法是,问自己一个问题:这则信息能让我获得什么样的新知或启发?比如,你读了一篇文章,标题叫作《高效能人士都会关注的五个细节》或者《上进的人都在遵循的十条法则》,这时候问问自己:这篇文章给我带来了什么新知或启发?如果你发现,这些信息只是让你觉得“没错,我就是这样的高效能人士”或者“你看,我就是这样上进的人”,它大概率属于让你过于舒适的信息源。

  • 2024-01-01 09:31:33

  • 削减信息源的第三个方法叫作,削减缺乏具体事实的信息源。

  • 何谓事实?事实指的是客观存在,并可以被证实的信息或情况。比如“水在标准大气压下达到零度会结冰”,这就是一个事实,不受个人感情、偏见或观点的影响。但许多时候,我们获取到的信息只是伪装成事实的观点而已。比如,许多对大公司、知名产品和名人进行分析的文章中,都充斥着大量的观点。这些文章搭配一些春秋笔法,让人读起来就像看小说一样过瘾,但实际上并没有提供任何事实。我们如果把这样没有依据的观点当作事实,就会造成许多决策失误。

  • 2024-01-01 09:32:06

  • 那么如何判断信息源中是否含有事实呢?你可以观察里面是否包含具体且长期的实践,以及作者的判断是基于上述实践,还是粗暴的主观判断。

  • 2024-01-01 09:32:43

  • 削减信息源时,请记得一句话:越低级的信息,越是充满了主观判断和结论,以此降低接收者的思考难度;而越是高级的信息,越是充满客观事实,尽量避免下判断,将判断的任务交给接收者。

  • 2024-01-01 09:34:39

  • 什么是一个好问题,为什么每次让你提问,你觉得自己的问题不行

  • 那什么才叫一个好问题呢?举个例子。你想知道如何在海外推广产品,不要直接问对方“你们怎么做海外推广的啊”。你可以问得更具体一些,甚至可以先分享一些自己的观点和经验,比如:“你们在海外推广产品时,主要用了哪些付费推广渠道、哪些免费渠道?我们的做法是……你们怎么看?”一个好问题,一方面要能提供丰富的背景信息,另一方面要有清晰的边界,越具体越好。

  • 2024-01-01 09:35:21

  • 把他人作为信息源时,如果你想获得更优质的信息,还有三个要点需要注意。

  • 第一个要点是,听实践者讲述事实时,留意他在叙述过程中提及的细节。

  • 你会发现,其实真正了解大局的实践者并不会天天谈论宏大的叙事。他们充分了解一个又一个看似枯燥的细节,并且通晓这些细节之间的微妙关系。如果有兴趣,你可以去读一读巴菲特每年写给股东的信。你会发现,他不是靠着踢踏舞、看报纸和喝可乐就成了股神,而是对整个投资市场了如指掌。他从枯燥的细节中反思过去,并挖掘新机会。而对我们来说,这些充满细节的事实信息,远比那些充满戏剧性的宏大叙事更有启发。

  • 2024-01-01 09:41:59

  • 为什么问不出好问题,视角太少?

  • 培训过程中我就发现,面对同样的信息,一个人拥有的视角越多,那么他收获的有价值的知识就越多。

  • 比如在学习如何使用关东煮机器时,如果只是带着店员视角,那么你获得的可能只是如何给机器开火、如何清洗机器之类的知识;而如果你能同时为自己预设一个经营者视角,那么你就可以通过观察和提问获取更多信息。例如关东煮食材保质期往往比较久,这样报损率才低;不同食材在滋味上要能相互促进,有的负责放味,有的负责吸味,这样做出来才好吃;机器的操作步骤要非常简单,不要求什么厨艺,这样才能降低招人的难度……

  • 不仅如此,你还可以从供应链管理人员的视角看,关注每种食材的供应者是谁,成本有多少;你还可以从人力资源管理的视角看,关注如何采用更标准化的机器来降低培训难度,等等。

  • 你看,面对同样的信息,如果只拥有店员这一种视角,那么你只能获取极其有限的知识;而如果能从多个视角来观察和理解眼前的信息,你就能获得N份知识。

  • 你可能会觉得,拥有多元视角固然有益,但转换视角并非易事。确实,就像并不是会背微积分公式就能熟练应用那样,转换视角也需要我们不断练习。以下是三种常见的练习方法,希望可以帮你从0到1,学会转换视角。

  • 2024-01-01 09:43:39

  • 方法一:考察概念

  • 第一种转换视角的方法是“向下看”,挖掘“地表以下”的信息。其中很典型的一种应用叫作:考察概念。

  • 关于考察概念这件事,Light 提过一个观点:“即便是简单的信息,一旦对其进行概念层面的考察,我们也可能会发现,自己其实对它一无所知。”

  • 2024-01-01 09:44:12

  • 向下看的例子,如何正确认识gpt的方法

  • 比如 2023 年年初,许多人都在探讨“ ChatGPT 是否会替代自己的工作”,相关信息多如牛毛。如果只盯着问题的表面,我们心里肯定恐慌。但其实在哲学家维特根斯坦看来,我们应该先问“是什么”,再问“是不是”。

  • 维特根斯坦所说的“是什么”和“考察概念”很像。如果仔细考察上述问题里的概念,你会发现许多模糊的地方:

  • 1.“ChatGPT”指什么?是指 ChatGPT 这个应用,还是指 ChatGPT 背后的GPT-3、GPT-3.5或者更先进的技术?是专指以 GPT 为代表的 LLM(大语言模型),还是泛指 AGI(通用人工智能)?

  • 2.替代什么样的“工作”?是文员、律师、作家、教师?还是程序员、导演、记者?这些工作有何异同?

  • 3.以什么样的“方式”替代?是直接碾压式替代,还是渐进式替代?是彻底替代,还是只能替代一部分?

  • 4.……

  • 如果不能清楚地界定这些概念,那么一个人就算花再多精力去解答会不会被替代的问题,也很可能是缘木求鱼。

  • 让我们继续聚焦于 GPT 这个概念,GPT 本身是 Generative Pre-trained Transformer 的缩写,指一种特定的大语言模型。这意味着它并不是先知,也不是搜索引擎,而是根据概率让所有的对话能“继续”下去。了解到这一点后,我们就不应该指望 2023 年年初的 GPT 能够给出大量靠谱的决断,反而要考察它给出的答案是正确的还是胡编的。

  • 进一步考察,我们会发现 2023 年年初的 GPT 更像是一个聪明的本科大学生,可以像助理一样帮我们提供参考信息,但不能独立完成工作。考察到这一步,我们也就不再那么恐慌了,而是要思考:这么好的助理能帮我做什么事?

  • 你看,如果我们不搞清楚关键概念就行动,比如马上创业,all in(全部押进)LLM,或者立即报名 ChatGPT 培训班,看似努力,却容易迷失其中。而如果提前把概念考察好,我们就会发现更多背后的信息,发现一片新天地,提出更多好问题。

  • 2024-01-01 09:48:10

  • 方法二:寻找范式

  • 第二种转换视角的方法是“向上看”,抽象一层,寻找可迁移的范式。

  • 何谓范式?简单来说就是各个领域里被大家公认的观念、理论或方法。面对同样的信息,如果能带上“寻找范式”的视角去看待,你会发现,很多信息看似和自己关系不大,却也能带来宝贵的启发。

  • 2024-01-01 09:51:01

  • 方法三:顺藤摸瓜

  • 第三种转换视角的方法是“向四周看”,找到与你关注的信息相关联的关键线索。其中一种典型应用就是顺藤摸瓜。

  • 我曾经有个不好的读书习惯,即讨厌看后记、附录、引文、注释等“边角料”信息。后来我发现,无论是书、演讲,还是文章,其中的每一条信息都不是孤立存在的,而是嵌在一个更大的知识网络里。而连接整张网络的,正是那些看似不起眼、曾被我看作“边角料”的信息。面对这些信息,如果能顺藤摸瓜去探索,我们会有更多收获。

  • 除了附录、引文等信息,我还会特别留意自己所关注的信息中出现的“人”“概念”和“事物”,把它们作为线索,顺藤摸瓜,探索更多相关信息。

  • 2024-01-01 09:52:23

  • 接下来,我们就来为你分享记笔记或知识管理最重要的两条心法:第一,以我为主;第二,持续不断。

  • 2024-01-02 20:19:04

  • 记笔记的出发点,在于解决现实问题。而现实问题的提出,则需要从自己所处的环境、所做的事情出发去寻找。好的问题像北极星,能指引我们不断探索答案。而没有问题的各种积累,则像毫无目的地垒墙,让我们白白浪费力气。

  • 截至今天,flomo 的开发还在继续,我当年提出的那个问题(如何让 flomo 为更多人带去有价值的帮助)也还没有最终答案。但正是这个长期而具体的问题,像北极星那样不断推动我继续向前,不断学习和实践。

  • 2024-01-02 21:04:22

  • 如何坚持写四年和算法相关的知识库?

  • 自 2017 年起,我开始维护一个关于产品的知识库——“产品沉思录”,分享与产品有关的文章,每周更新一次,七年间几乎没有中断,从未重启。这七年的持续积累,为我带来了什么价值呢?

  • ·不但帮我解决了工作上的许多问题,还促使我整理出好几套对外分享的课程;

  • ·让我有机会认识了许多各行各业的朋友,拓展了书本之外的知识;

  • ·有的知识间接塑造了 flomo 的理念,有的知识成为写作本书的原始素材……

  • 其实我最想跟大家分享的不是这些价值,而是一件亲身经历过才知道的事情——这些价值不是在我做“产品沉思录”几天或几个月之后就显现的,而是从第四年开始,才陆续涌现出来。也就是说,如果没有前三年持续不断的积累,那么我也无法享受这样的知识复利。

  • 2024-01-02 21:08:11

  • 控制自己的主观意愿

  • 个例子。如果想通过记笔记积累知识,那么我们就不该以完美的自己为标准,设置一个难以企及的目标,比如要求自己日更几千字,或者每年读上百本书。相反,我们应该设置上限,让自己每天记录或读书的数量尽量不超过某个值,比如每天写三张卡片或者读两页书——就像阿蒙森团队每天前进的距离一样,以最差的状态为参照来设计目标,留出余裕。这样,在精力不够的时候,我们可以因为目标不高而继续坚持;而在精力充沛的时候,也不至于一下子耗尽热情。

  • 你看,“确定好目标之后,应该竭尽全力去完成”似乎是大多数人的共识,但我们做许多事情都是刚开始热情高涨,坚持不了多久就草草收场。当达到一个目标需要的时间足够漫长时,“冲锋”并不可取。就像我们要减肥,不能指望连续锻炼一星期就把体重减下来——这样做除了会让我们产生强烈的逆反心态,不会带来任何其他好处。而设置上限,就是让我们不要轻易去满足那些“脉冲式”的欲望,这样我们才能保持欲望的小火苗,有持续的动力去不断积累。


@翦商:殷周之变与华夏新生

商起源

  • 《诗经·商颂·玄鸟》对契降生的描写是:“天命玄鸟,降而生商。”

    • 玄鸟,喻指上帝(天)和商人之间的独特媒介,至于是什么鸟,则有燕子和凤凰等不同解释。
  • 《诗经·商颂·长发》则是:“有娀方将,帝立子生商。”

    • 有娀是简狄所在的部族,“有娀方将”是有娀氏将要兴起之意。

为什么需要祭祀

  • 以色列考古学家吉迪·谢拉赫认为,在“早期国家”或“复杂酋邦”阶段,社会开始变得更复杂,王权刚刚出现,统治者发现自己的统治体系还不够发达,急需借用一种强大的机制来维护权力,从而导致人祭宗教和战俘献祭行为的产生。

  • 为何战争与人祭可以铸牢新兴王权,吉迪却没有多谈。

  • 结合前文对新石器末期到中商这上千年人祭历程的梳理,本书认为可以从两方面来理解:

    • 理论层面,王的大量献祭(意味着他获得神的福佑)是王权融合神权的标志;

    • 现实层面,战争让本国族的民众团结起来一致对外,从而更巩固了王的权力。

大都无城

  • 新宫殿区坐落在洹河弯内侧,今安阳小屯村北,“殷墟博物苑”所在地。

  • 营建新宫殿时,武丁抛弃了之前的“城池”都城模式。他可能不相信商朝都城会受到外来威胁,认为与其耗费庞大的人力夯筑城墙,不如主动对外扩张。武丁规划的宫殿也不再是封闭的大院落,而是若干座彼此独立的大型建筑,皆有厚达1米的夯土地基、木柱框架结构和厚重的夯土墙,足以抵抗地震,且分散的单体结构也更利于防火。

商王朝留下了众多遗址、文物以及累累白骨,那么,这个身居华夏文明源头的王朝是如何运作的?商王如何解释自己的权力来源?他的臣民对此又是如何理解的?

  • 在商人的眼里,世界是冷酷的,充满暴力、杀戮、掠夺和不安全。他们不认为鬼神有明确的善恶观念,或者说,商人本没有明确的善恶观念,自然也不会想象鬼神能有。商人认为鬼神会随时、随意给任何人降下灾难,大到灾荒和战乱,小到生活中的各种不如意,都有鬼神在背后操纵,即便是商王也难免。

层累地造成的中国古史

  • 史学大家顾颉刚称这种现象为“层累地造成的中国古史”,意思是说,越晚产生的传说,反倒在神谱里面越古老,就像人们堆柴堆,“后来者居上”。因为时代越晚,各族群的祖先传说就越是逐渐汇总到一起,这时,各自的先祖孰先孰后以及谁比谁厉害就成了问题。因此,为了制造更大范围的身份认同,就只能创作更古老的先祖,给各族群增添一位共同的始祖。先祖诸神的关系和谐了,世间各族群的关系才能和谐。

《易经》里为何会有这么多周人生活的真实记录?这便涉及周昌创作《易经》的目的:研究各种事物背后的因果联系,最终建立一套翦商的理论和操作方法。

  • 先说最古老的所谓伏羲“八卦”。有四对卦,分别是乾和坤,坎和离,震和艮,巽和兑;各有代表图案,被称为“卦象”,由三根表示阴阳的“爻”组成,一根直线代表阳爻,两段半截的线代表阴爻。

  • 东周时的学者说,这是宇宙间的八大元素:乾代表天,坤代表地;坎代表水,离代表火;震代表雷,艮代表山;巽代表风,兑代表泽(沼泽)。(《周易正义·说卦卷九》)至于伏羲或者周昌时代的人是不是这么理解的,就不好说了。

  • 再来说六十四卦。卦象由两个八卦上下重叠组成,一共有六十四种,都有六个爻。假如是两个八卦的乾叠加,就仍叫乾卦,以此类推。但不一样的八卦互相叠加,就需要起新的卦名了,比如,震下坎上,叫屯卦。

  • 六十四卦的每个卦都有一条简短的解说词,这被称为“卦辞”;相对的,卦里的每个爻也都有一条“爻辞”。概而言之,《易经》是由六十四卦的卦名、卦象、卦辞和爻辞组成的。

  • 《易经》并非文王专门编写的算命教材,而更像是他自己的练习簿,所以内容驳杂,有大量的私人琐事。从萌生翦商之念始,文王就反复将其代入和推算,并随时验证、修订和增补,希望总结出一套最精确的占算方法,而最终目的,当然就是在消灭商朝的战争里运用这套预测技术。

从现代人的视角看,文王周昌为翦商而推演的“理论”,或许可以分为以下三个层面:

  • 一,宗教的,即他对商人“上帝”概念的重新诠释和利用。文王的身份类似犹太教的摩西、伊斯兰教的穆罕默德,身兼部族政治首领与神意传达者两重职能。

  • 二,巫术的,即他在《易经》里对商朝施展的各种诅咒、影射与禳解之术。在上古初民时代,这些行为往往和宗教混杂在一起,不易区分。

  • 三,理性的,或者说世俗的,即各种“富国强兵”的策略和行师用兵的战术。

从考古来看,商朝一直繁荣的人祭和人奠基到西周建立时却戛然而止。文献和考古两相对照,本书推测,这场重大变革发生在周公辅政时期。

  • 这场变革几乎从未被历史文献提及,甚至商代无比“繁荣”的人祭行为也没有被记录。那么,周人为何要掩盖商人的血祭宗教,以及这个宗教是如何被消灭的?

  • 商人的血祭宗教是被周公终结的,但周公所做的远不止于此,他还要抹杀关于它的记忆,防止它死灰复燃。

  • 而忘却是比禁止更根本的解决方式。为此,首先必须毁灭殷都,拆分商人族群,销毁商王的甲骨记录;其次,自古公亶父以来,周人曾经为商朝捕猎羌俘,这段不光彩的历史也应当被永久埋葬;再次,长兄伯邑考在殷都死于献祭,他的父亲和弟弟们还参与并分享了肉食,这段惨痛的经历也必须被遗忘。

成王亲政第五年,第二次东夷战争结束后,成王和母后东返,途中经过成周洛阳小住了一段时间。在这期间,有一位贵族曾获得成王的接见,之后更是专门制作了一件青铜尊,这就是因“宅兹中国”的铭文而著称于后世的“何尊”。这也是目前发现的“中国”一词的最早记录,它在当时的意思是“中原之地”。

周社会是典型的身份世袭制,周王任命朝廷高级官员(卿)的选择范围很小,基本由十几个显赫的家族世代占据着朝廷主要官职。而且,官职本身并没有薪俸,全靠自家封邑收入,做官只是可以给他们提供获得更多封邑的机会。各诸侯国内部的权力结构也类似,但规模要比镐京朝廷小很多倍。

  • 就这样,随着统治阶层的繁衍,周朝特色的贵族制度逐渐得以形成,其中,最首要的是“宗法”家族制,核心则是嫡长子一系的独尊地位。

  • 一,周朝各姬姓诸侯(被分封的王室亲属)对周王的效忠服从,是家族兄弟(及其后人)对嫡长兄(及其嫡系后人)的服从。

  • 二,在各诸侯国内部,太子之外的公子被分封为世袭大夫,大夫再繁衍和分封出“士”。

  • 三,非周族的异姓诸侯和贵族则通过婚姻关系被纳入家族结构中。周王尊称同姓诸侯国君为“伯父”,称异姓诸侯国君为“伯舅”(当然必须是曾经和周王室有过联姻关系的),伯代表排序。

  • 这套基于血缘宗法制的贵族等级和封建政治秩序,周人称之为“礼”。不同等级的贵族使用相应的车马、住宅、衣服、乐器、玉器、酒器和食器组合,丧礼和随葬品也以此类推。各种典礼仪式上,比如朝见天子、祭祀和宴会等,入场顺序以及站或坐的位置由相应的等级身份决定。

  • 典礼可以在不同层次举行,如诸侯国或大夫家,但基本原则一致。贵族的冠礼、婚礼、丧礼和祭礼也都有各等级的标准规范,几乎所有礼仪场合都有乐队伴奏,而乐队的规模和演奏的乐曲也都有相应规范。所以,周人贵族文化又被称为“礼乐文明”。

当然,春秋的人祭回潮并未成为主流,可能有以下两个原因:

  • 其一,战国时期的社会重组和政治变革。由于列国兼并战争的威胁日渐增加,各国都进行了变法运动,废除贵族制,实行君主集权和官僚制,国家的首要目的是富国强兵,在国际竞争中获胜。而这需要官僚机器用理性、功利的方式管理社会,人祭自然属于不可容忍和必须取缔的行为。

    • 战国初期魏国西门豹治邺的史事,呈现的就是新兴官僚政治和民间传统文化的碰撞。当时邺县还有“为河伯娶妇”的风俗,本质上是把少女奉献给漳河水神的人祭行为。邺县在殷墟以北15公里,所以这种风俗很可能是殷商宗教的残余。到西门豹时代,普通的邺县人已经不愿为祭祀承担如此高昂的代价,只是苦于无法对抗地方精英“三老”和女巫联手主导的民间权力结构。为此,时任邺令的西门豹表面上遵循本地宗教理念,实际却找借口把女巫及其弟子和三老先后投入了漳河,从此,这里再无人敢复兴人祭宗教。

      • 《史记·滑稽列传》褚少孙所作增补。虽然秦汉之后的王朝法律已经不允许猎俘杀祭,但人祭宗教也曾在民间迁延了较长时间。直到汉魏时期,宋襄公曾经献祭的“次睢”神社仍存在,又被称为“食人社”;也有祭祀者会花钱雇穷人充当人牲,祭祀时把人牲捆绑在神社前,如同屠宰的牲畜。不过从文献记载来看,也许汉魏时的人祭只是程序性表演,而非真正杀人、食人。参见《续汉书·地理志》注《博物记》曰:“县东界次睢有大丛社,民谓之食人社,即次睢之社。”《艺文类聚》卷五九引《从征记》:“临沂厚丘间,有次睢里社,常以人祭,襄公使邾子用鄫子处。相承雇贫人,命斋洁,祭时缚着社前,如见牺牲,魏初乃止。”
  • 其二,以孔子为代表的儒家逐渐兴起,开始提倡仁政和爱人。当时还有制作陶人俑随葬和埋入祭祀坑的习俗,结果遭到孔子诅咒:“始作俑者,其无后乎!”孟子对此的解释是,孔子讨厌这种模拟用人殉葬的行为,“为其象人而用之也”。(《孟子·梁惠王章句上》)和多数人不同,孔子的职业是整理上古史的学者,他很可能是在晚年破解了商周之际的一些隐秘往事,担心用陶俑随葬会唤起人们对人祭时代的记忆。

后世人对周公的认识,有事功和制度文化两方面:事功,主要是周公辅佐成王、平定三监之乱,为西周王朝奠定开局;制度文化,主要是周公“制礼作乐”,确立西周的政体,包括诸侯列国分封格局和贵族等级制度。在考古发现商朝的遗址与人祭文化之前,人们对周公的理解只能达到这种程度。

  • 但事实上,周公最重要的工作是消灭商人的人祭宗教,以及与之配套的弱肉强食的宗教价值体系。他不仅阻止了周人模仿和继承这种宗教文化,也在殷商遗民和东夷族群中根除了它。尤其关键的是,周公还抹除了与商朝人祭有关的记忆,甚至也隐藏了自己禁绝人祭行为的种种举措。这是为防止人祭宗教的死灰复燃和卷土重来,也是为掩盖周人曾为商朝捕俘人牲的那段不光彩的历史。

为了填补人祭宗教退场造成的真空,周公发展出了一套新的历史叙事、道德体系和宗教理念。这主要体现在《尚书》的几篇诰命中:

  • 一,淡化商人对“帝”的崇拜。在商朝末期,“帝”已经和商王身份重叠,商王具有“帝”的神性。但周灭商后,王已经不能身兼“帝”之名号,对周人来说,帝在高高的天庭之上,不会化身为世间凡人。

    • 虽然我们还不能完全确定这个原则就是由周公确立的,但从《尚书》的几篇诰命可以发现:在对殷商遗民讲话(如《多士》)时,周公会频频引用上帝的命令来威吓和诱导商人,这是因为商人格外信奉上帝,只能因势利导;但在对周族自己人讲话时,如册命弟弟周封为卫侯的三篇诰命,周公却极少谈到上帝,尤其是对族人谈论现实和规划未来时,他从不动用上帝进行论证,更不涉及其他的神灵。这显然是一种有意识地 “敬而远之”,让现实和神界保持距离。从这些迹象看,周朝人“疏远”上帝或其他诸神的传统的确是由周公奠定的。
  • 二,为减少神界对现实的干预,周公会尽量用“天”的概念来代替“帝”,因此,上帝发布的命令(“帝命”)变成了含糊的“天命”。

    • 天命的观念在后来的中国一直存在,但人们已经忘记了它的缘起。“天”无形无像,无言无行,不容易被赋予拟人化的个性。在《诗经》里,上帝曾频频给文王下达命令,如命令文王攻打崇国,武王灭商据说也是来自上帝的意旨,但后世周王已经无法接收神界的具体指示,所以改称为“天命”后,它变成了一种更为抽象的、近乎隐喻的道德规训。

      • 杜勇:《尚书·周初八诰研究》,中国社会科学出版社,1998年,第206页。另,在《尚书·盘庚》中,盘庚的发言中也有“天命”,但陈梦家认为,“商人称‘帝命’,无作天命者,天命乃周人之说法……此亦战国宋人之拟作”。参见陈梦家《尚书通论》,中华书局,1985年,第207页。本书认为,《盘庚》中的“天命”可能有西周之后的改动,但该文主体仍是盘庚时代的作品。
    • 当然,周公时代还不可能有科学主义的无神论认知,神界即使被放置得比较远,也不会和王朝政治完全绝缘。比如,西周的王就被称为“天子”,也就是天的儿子,而这是连商代甲骨文也没有的词,但无论怎样,“天”还是过于含糊,周人及其以后的历代王朝从未给“天子”增加更具体的神性定义与功能。即便秦始皇使用“皇帝”尊号,其直观用意也是强调自己和六国之王的不同,虽有强调王者尊贵的这一层神性之意,但也使“帝”落入凡尘,并不比“天子”概念更神秘。

      • 周公这方面的理论主张在《尚书·无逸》篇中体现较多。
  • 三,周公宣称,王者应当爱民、德治和勤勉,这样才会受到“天命”青睐,长寿享国;如果王者残暴对待庶民和小人,天命就会转移到更有德的候选君王身上,从而改朝换代。

因为周公掐断了神对人间的直接干预,这意味着华夏世界不会再有主导性宗教,以神的名义颁布的道德律条(如摩西十诫、佛家五戒)也无从产生,所以周人必须另行寻找一套用于世俗生活的道德原则。这种世俗道德的原理,是“推己及人”,也就是把自己放在他人的位置上考虑,从而决定自己对待他人的方式。

  • 周公的办法是对《易经》进行再解释,具体方法则是在文王创作的卦爻辞后面加上一段象传进行说明。象传不再鼓励任何投机和以下犯上的非分之想,全是君子应当如何朝乾夕惕,履行社会责任的励志说教,和文王卦爻辞的本意完全不同。 比如,乾卦的象传是“天行健,君子以自强不息”,坤卦的象传是“地势坤,君子以厚德载物”,远比文王卦爻辞清晰易懂,而且富于积极和励志的色调。

“六经”具体是指《诗经》《尚书》《仪礼》《乐经》《易经》《春秋》。其中,《诗经》《尚书》《易经》包含大量商周易代时期的史料。在“六经”成书之前,社会上传抄流行的主要是单篇文章,真伪混杂,质量良莠不齐。为此,孔子选择了最可信且符合周公精神的汇编成书,而不符合这两点的篇章就逐渐失传了

  • 《诗经》记载了周族从姜嫄、后稷以来的多篇史诗,包括周族早期历史、文王确立翦商大计、武王的灭商战争、周公平定三监叛乱以及对商文化的改造等,属于经过周公修订的官方正式版本。

  • 书是文献之意,《尚书》就是古代的文献。按时间顺序,《尚书》分为《虞书》(尧舜禹时期)、《夏书》、《商书》和《周书》。在收入“六经”之前,《尚书》中各篇都是单行本,基本规律是越古老的越不可信,内容大都是西周及之后的人按照周公重写上古历史的精神,虚构了尧舜禹和夏商时期的很多帝王故事和讲话稿,基本是周公式的道德说教,不具备史料价值。当然,也会有个别真正的商代文献,比如盘庚迁都的讲话稿,内容上和周公精神抵触不大,或者已经被周公授意删削过,所以保留了下来。总之,这些真真假假的篇章被孔子分别收入了《尚书》的《虞书》《夏书》和《商书》部分 。

  • 当然,孔子编辑“六经”的作用不止于此,其中还保存了从西周创立直到孔子时代的文化成果,这就是周人贵族社会的诗歌(《诗经》)、礼俗(《仪礼》)和历史(《春秋》)。

概而言之,周公时代变革的最大结果,是神权退场,这让中国的文化过于“早熟”;战国时代变革的最大结果,是贵族退场,这让中国的政治过于“早熟”。而在其他诸人类文明中,神权和贵族政治的退场,都发生在公元1500年之后的所谓近现代时期。


@读书是否是唯一重要的事?

[[@我的笔记法(借助 Zettelkasten 和 Obsidian)]]

[[罗翔:非功利性阅读]]

  • 为了快速获取知识而读书

    • 获取概念或技术
  • 为了认识这个世界而读书

    • 认识世界的手段,什么是政治

实践和读书矛盾吗?

读书不是获取知识的来源

  • [[人类理解论]]

  • 读书获取理论,用理论指导实践。

  • 方法论:从实践中获取经验,然后对经验反思总结和提炼。

读书三个阶段

  • [[@如何阅读一本书]]

  • 在结合自身的经验,我发现我经过这样三个阶段:

    • 在最开始的时候不知道看什么,漫无目的的阅读,没有作笔记,也没有写评价,最后什么没有收获

    • 然后开始有目的的阅读,比如喜欢看某一位作者的书,比如 [[密尔]],或者是为了了解一个主题去阅读相关的书籍,比如去看 [[哲学]],又或者只是为了学习一门技术比如去读 [[Spring 知识点]],这个阶段会围绕同一个主题进行大量的阅读,通过大量的阅读积累对其的认识,并在自己心里产生基础的概念

    • 在有了一定的基本知识体系之后再去阅读是为了接受新的、不同的思想,并将其拆解开放到自己的知识体系中。

      • 如果以哲学家为例,在了解了其基本观念之后,逐渐添加我是否支持其观点,有没有反驳他的观点,我能不能找到佐证。

      • 又如果是一门技术,新产生的技术解决了之前的什么问题,又会产生什么新的问题,这个技术细节为什么要这样实现,有没有更好的实现方式。

主动获取信息

  • rss 源是一种被动接受信息的工具。

  • 搜索,总结体系,实践,放到知识库中。

  • [[主动学习]],有针对性的获取信息,不仅可以避免自己陷入信息的汪洋,也可以扩展自己的认知边界,将新的、不同的理论纳入到自己的知识体系,不断地完善自己零散的思维模式。最关键的是,当不断阅读自己的感兴趣的内容时,会自发的产生兴奋的状态,并且可以不断往外延伸出不同的主题。


@被讨厌的勇气

现在是不是由过去所决定的?

  • 弗洛伊德 原因论 : 现在是由过去所决定的而过去无法改变。
    + 反驳 :-> 如果过去决定一切,而过去又无法改变,那么也就说明现在无法改变。

  • [[阿德勒]] 目的论 #card

    • 过去的经历不会影响现在,从经历中发现符合自己目的的因素才会影响现在。决定我们自身的不是 过去的经历 ,而是 我们赋予经历的意义
      [[人的烦恼皆源于人际关系]]
  • 人际交往产生自卑感和自卑情节

    • [[学历自卑]]

      • 自卑感:一个人学历不高,如果他认为自己学历低,所以要加倍努力。

      • 自卑情节:一个人认为自己之所以不成功,是因为自己学习低。

[[课题分离]]

  • 如果一味寻求别人的认可、在意别人的评价,那么最终就会活在别人的人生中。

共同体

[[人生是一连串的刹那]]

阿德勒主张目的论,其心理学分析路径就抛开了人过往的历史包袱,着眼于眼前、现在,从而把解决问题的办法导向积极的、光明的一面。

越自负的人越自卑

  • 哲人:而且,对自己的学历有着自卑情结,认为“我因为学历低,所以才无法成功”。反过来说,这也就意味着“只要有高学历,我也可以获得巨大的成功”。

  • 青年:嗯,的确如此。

  • 哲人:这就是自卑情结的另一个侧面。那些用语言或态度表明自己的自卑情结的人和声称“因为有A所以才不能做到B”的人,他们的言外之意就是“只要没有A,我也会是有能力、有价值的人”。

  • 青年:也就是说“要不是因为这一点,我也能行”。

  • 哲人:是的。关于自卑感,阿德勒指出“没有人能够长期忍受自卑感”。也就是说,自卑感虽然人人都有,但它沉重得没人能够一直忍受这种状态。

  • 哲人:不是这样。特意自吹自擂的人其实是对自己没有自信。阿德勒明确指出“如果有人骄傲自大,那一定是因为他有自卑感”。

  • 青年:您是说^自大是自卑感的另一种表现^。

  • 哲人:是的。如果真正地拥有自信,就不会自大。正因为有强烈的自卑感才会骄傲自大,那其实是想要故意炫耀自己很优秀。担心如果不那么做的话,就会得不到周围的认可。这完全是一种优越情结。

  • 青年:……也就是说,自卑情结和优越情结从名称上来看似乎是正相反的,但实际上却有着密切的联系?

夸耀不幸

  • 哲人:密切相关。最后再举一个关于自夸的复杂实例。这是一种通过把自卑感尖锐化来实现异常优越感的模式。具体就是指夸耀不幸。

  • 青年:夸耀不幸?

  • 哲人:就是说那些津津乐道甚至是夸耀自己成长史中各种不幸的人。而且,即使别人想要去安慰或者帮助其改变,他们也会用“你无法了解我的心情”来推开援手。

  • 青年:啊,这种人倒是存在……

  • 哲人:这种人其实是想要借助不幸来显示自己“特别”,他们想要用不幸这一点来压住别人。

    • 例如,我的身高很矮。对此,心善的人会用“没必要在意”或者“人的价值并不由身高决定”之类的话来安慰我。但是,此时我如果甩出“你怎么能够理解矮子的烦恼呢!”之类的话加以拒绝的话,那谁都会再无话可说。如此一来,恐怕周围的人一定会小心翼翼地来对待我吧。
  • 青年:的确如此。

  • 哲人:通过这种方式,我就可以变得比他人更有优势、更加“特别”。生病的时候、受伤的时候、失恋难过的时候,在诸如此类情况下,很多人都会用这种态度来使自己变成“特别的存在”。

  • 青年:也就是暴露出自己的自卑感以当作武器来使用吗?

  • 哲人:是的。以自己的不幸为武器来支配对方。通过诉说自己如何不幸、如何痛苦来让周围的人——比如家人或朋友——担心或束缚支配其言行。刚开始提到的那些闭门不出者就常常沉浸在以不幸为武器的优越感中。阿德勒甚至指出:“在我们的文化中,弱势其实非常强大而且具有特权。”


@麦肯锡精英高效阅读法

Who

  • [[赤羽雄二]],麦肯锡韩国分公司创始人。

Why

  • 学习精英阅读的方法和技巧

  • 了解别人的阅读经历

What

  • 为什么要读书

    • 网络上的信息不具备系统性。

    • 网络上无法获得涉及事物本质的深层次的知识。

    • 能够理解他人情绪、体谅他人的人,绝不会贸然做出盲目的判断,首先会努力去理解现场和对方的情况。

How

  • 如何挤出时间来读书

    • 最好的办法就是尝试在不同的时间就寝和起床,以了解自己最低程度的睡眠时间。建议大家在不影响睡眠的基础上,创造读书的时间。

    • 在时间表中添加读书时间

    • 只在有需要时读书:30 岁之前读 300 本书,之后每年读 50 本书。

    • 用社交网络召集读书伙伴:设置 deadline 和其他人分享

  • 如何专注读书

    • 坚持读完一本书之后再阅读下一本书 why 主题阅读时如何解决?

    • 买书之后即刻开始阅读

    • 不在阅读时做笔记

    • 即使有不理解的地方,也不要重读:阅读关键在于不重读。就是说,即便有不理解的地方,也不要翻回去重读。比起重读,把握全书的主旨更为重要。

    • 读完之后立即整理笔记

  • [[A4 纸整理笔记]]:将A4纸横放,左上角写主题,右上角写日期,每页写4~6行,每行写20~30个字。在一分钟内将想到的事情全都写在纸上,每天写20~30页纸。

    • 书中重要的内容:言之有理的内容,表达出色的内容,体现作家洞察力于智慧的内容
  • [[读书档案]]:每月读 4 本书,一年就可以写出 48 篇,集中放在一个地方保存。

    • 读这本书的目的

      • 基于好奇心和求知欲去阅读一本书
    • 读书后的感受

    • 阅读后会采取哪一些行动

    • 3 个月之后要做些什么,有什么样的改变?

      • 每 3 个月评估做的怎么样(◎非常好、○勉强完成目标、△不太好,没有成果、×完全没有做好)
  • 读书后写博客:限制读书时间,用更多的时间输出

    • 极简方法:确定题目后,思考文章的内容和结构,再确定小标题。每个小标题需要写1~2行的内容。

    • 确定一个自己最关注的主题。

    • 事先决定文章的提纲。

    • 举出具有代表性的事例。

    • 使用定时器,催促自己完成。

  • 提高信息敏感度

    • 问题意识打造高深见解和洞察力

    • 阅读优秀作家的全部作品

    • 延后阅读畅销书

  • 如何获得演讲的机会

    • Step 1:以5年后的目标为基础,思考“一年后想要成为什么样的人”“想得到什么样的评价”“想在什么场合做一个怎样的演讲”“演讲的题目是什么”“哪些人曾经做过此类演讲,是否能和他们竞争”等问题,将这些问题总结在一张纸上。

    • Step 2:在读书的同时,将数十个相关领域的关键词登录到谷歌资讯上,每天阅读相关报道,不断补充自己掌握的知识(第五章会详细介绍)。

    • Step 3:^列出20个左右要写在自己博客上的题目^。这时,可以参考Step 1中整理的“演讲的题目”,列出一些能够向策划演讲的社区骨干、事务所以及研讨会策划公司的负责人宣传自己的博客题目。

    • Step 4:每周写1~2篇博客。原本就是自己的专业或相近领域,由于每天阅读一定数量的报道,所以能够不断整理自己所掌握的知识,然后再写成3000~4000字的博客。

Think

  • 阅读其他人的博客或这微博之后,尝试给其他人留言。 发条 twitter 介绍我为什么要去看

Todo

  • 每次读完一本书写一篇[[读书档案]],可以问自己 3WH2T,可能 What 和 How 很难区分。

    • 读书档案是一种写博文的方法

    • 写作和总结的练习

  • 如果没有时间写长文章来分享自己的感受,可以使用 Twitter 进行简短的分享。 豆瓣 300 字评论总结主要内容。

  • 每天至少阅读 1 小时

出版后记

  • 书从多个角度分析了“为何优秀的人再忙也要读书,并且把书中的内容活用在工作和生活中”这个问题。

  • 越是忙碌的人就越能有效地掌控自己的时间,充分思考目的后再开始读书,从而做到“主动读书”。总之,就是要自己做出判断,合理分配时间,找到适合自己的读书法。

  • 在这本书中,作者详细介绍了一套系统、实操性高的读书技巧。不仅能够教你在工作之余如何合理规划时间,确保用来读书的时间,还能教你如何利用A4纸整理书中要点,牢记书中内容。更能教你如何在读过书后建立“读书档案”,设定行动目标,切实地将书中的内容转化为自身的知识。


@高效阅读法

[[Abstract]]

  • 本田直之,明治大学商学院产业经营系毕业,美国雷鸟(Thunderbird)国际管理研究所经营学硕士(MBA),日本品酒协会认定葡萄酒顾问、世界遗产学会会员、一级小型船舶操纵士。

    • 曾任职于花旗银行等公司,参与企划巴克集团(BUCKS GROUP)的运营,协助该公司在日本的店头市场(JASDAQ)挂牌上市。现任杠杆效益顾问有限公司董事长兼执行长,参与日美的创投企业投资管理,同时提供以少出力而获得丰硕成果的杠杆经营的建议。兼任日本财务学会董事、法人顾问会计董事、美国环球视野科技公司董事。
  • 内容简介:

  • 读书是一种自我投资,而且没有比这更划算的投资,比起投资任何报酬率好的金融商品来说,读书所带来的回报确实更多。阅读术是为了有效率阅读商业书而产生的“技法”。每个月出版的商业书数量超过百本,还有之前出版过的大量书籍,想要追上全部的书籍是不可能的,藉由本书多读的技巧,从大量的书中找出最合适自己的读物,把阅读商业书当成投资,有策略的实行,就能创造出100倍的回报。

[[Attachments]]

杠杆阅读术(即商业书的多读法则)

第 1 章 何谓多读商业书?

ls-type:: annotation
hl-page:: 18
hl-color:: yellow

  • 第 一章以 “何谓多读商业书? ”为标题,一方面 提及和速读的差异 ;另一方 面介绍多读的好处, 以及把它当作投资手段 ,将商场上的成功和读书联系在一起等 。
    ls-type:: annotation
    hl-page:: 10

  • 因为这1500元将来会有好几倍的回报。也就是说, 从我本身的经验以及周围事业成功的人的实际收益来估算的话, 大概会有一百倍的回报。
    ls-type:: annotation
    hl-page:: 20
    hl-color:: yellow

  • 为什么要读商业书

    • “为何要读这些书”的目的是显而易 见的:是为了要解决案例中出现的公司问题,并想出导引成功之路的对策。所以 ,我打算 只把 “解决企管问题应该知道的要素”印入脑海中, 并因此只选读重要的部分 。更不用说跳过不懂的单词去读, 那样当然阅读速度更快 。 不可思议的是,虽然跳着读,但不仅能思考,还能正确地掌握其中的意义 。
      ls-type:: annotation
      hl-page:: 24
      hl-color:: yellow

    • 如果将实际商场视为运动员的赛场来看的话,则商人读书就好比运动员的练习。也就是说,不读书的商人就像是平时不练习而突然临场比赛的运动员一样。
      ls-type:: annotation
      hl-page:: 34
      hl-color:: yellow

  • 记事本圆梦计划

    • 年幼的熊谷帮父亲搓洗背时, 父亲突然问他:“你知道动物和人的差别吗?”
      ls-type:: annotation
      hl-page:: 27
      hl-color:: green

    • 人类通过书籍 ,在数小时内就能够模拟体验人的一生 。 所以 ,要读书,要活到老读到老 。
      ls-type:: annotation
      hl-page:: 27
      hl-color:: green

  • 在商场上如何应用杠杆效益?

    • : 读书, 然后以自己独树一帜的方式应用书中所阐述的诀窍,活用在现实事务中。
      ls-type:: annotation
      hl-page:: 30
      hl-color:: yellow
  • 速读和多读差异

    • 多读了几本书, 并不是什么了不起的事 。仅仅做 “ 输入”的动作 ,只不过是自我满足而已 。 如何能输出”使用, 才是决定胜负的关键。
      ls-type:: annotation
      hl-page:: 39
      hl-color:: yellow

    • 速读是训练眼睛的移动法 , 是快速地将整本书读完的一种技术。 如果是这样的话,那么多读就可以说是切掉没用部分的一种技术。提升取舍资讯的能力 ,没有必要的地方不要读,这样才能缩短读书时间 。最后的终极目标是 ,在别人的经验上运用杠杆效益 , 把对实际事务有所帮助的技巧, 变成自己的东西。
      ls-type:: annotation
      hl-page:: 40
      hl-color:: yellow

    • 多读书, 不用全部读完
      ls-type:: annotation
      hl-page:: 56
      hl-color:: yellow
      ((63f4124c-49c7-42bd-8189-aaefa22444e1))

      • 经常抱着有目的的意识, 持续想着 “要从这本书吸收什么”。
        ls-type:: annotation
        hl-page:: 57
        hl-color:: yellow
    • 多读书是投资, 而且是世间稀有的投资(因为报酬率一定是正数) 。 也就是说,投资金额越多 ,赚得 越多; 读得越多,能够回收的金额也变得越多 。尽量多读书才是获利。
      ls-type:: annotation
      hl-page:: 58
      hl-color:: yellow

  • 我知道读书的重要性,但为何要持续一年读400本以上呢?
    ls-type:: annotation
    hl-page:: 55
    hl-color:: green

    • 靠读书更新自己的“常识”

第 2 章 选书就是挑选投资标的

ls-type:: annotation
hl-page:: 62
hl-color:: yellow

  • 在第二章 “选书就是挑选投资标的”中 ,我将说明多读的实施方法。
    ls-type:: annotation
    hl-page:: 10

    • 阐述关于书的找法 。虽说多读,但也应该避免随便拿起各种离谱的书,然后白费力气去阅读。尽量多发现好书,并活用在商场上,这是必 要的 。本书不断强调“读书就是一种投资”, 因为这也正是找寻和筛选投资标的的诀窍
      ls-type:: annotation
      hl-page:: 10

    • 本书将说明符合一般书店、 网络书店等各自特性的策略性活用方法 。
      ls-type:: annotation
      hl-page:: 11

  • 首先不可或缺的是“有目的地选书”。 如果具备 “自己的人生目标是什么 ” “现在面临的主要问题是什么”之类的大目标,你就能清楚地意识到“现在,自己需要什么样的书”。
    ls-type:: annotation
    hl-page:: 66
    hl-color:: yellow

  • 具有即战力的书多半是对自己而言浅显易读的书; 对商场上有帮助的书,与其说是理论,还不如说是实践的技巧 。所以 ,不该选“专业类型”,而应选“经验类型”的书。
    ls-type:: annotation
    hl-page:: 72
    hl-color:: yellow

    • 这是因为我的目的是 , 在别人的成功经验上附加杠杆效益。
      ls-type:: annotation
      hl-page:: 72
      hl-color:: yellow
  • 由于一流的人其商业哲学上有许多共通点 ,所以你持续读了几本后 , 就会了解到商业上成功的秘诀是有普遍性的
    ls-type:: annotation
    hl-page:: 73
    hl-color:: yellow

  • 选书方法

    • 依主题 选书
      ls-type:: annotation
      hl-page:: 75
      hl-color:: yellow

      • 从将来的目标倒推,推断自己当前必须完成的任务 , 然后, 依其相关内容选书。 想详知某个题目的内容 、 想解决某个问题等这种 “事先设定主题”的状况
        ls-type:: annotation
        hl-page:: 75
        hl-color:: yellow

      • 当读书的目的明确时,我建议采用 “类别集中法”的选书方式 。这是指 , 如果你想知道某种主题的内容, 那么, 你只要取得这类别的书,然后彻底全面地去读就可 以了 。
        ls-type:: annotation
        hl-page:: 77
        hl-color:: yellow

      • 只要是每本书都写到的相同内容 , 你就可以判断那是所有人都认为的重点 。
        ls-type:: annotation
        hl-page:: 78
        hl-color:: yellow

    • 依趋势 选书
      ls-type:: annotation
      hl-page:: 76
      hl-color:: yellow

      • 目的在于 ,掌握 、预测时代的趋势。 在杂志或新闻报道上 , 如果你认为,“这是有趣的经营方针”或是“这是改变后的投资方式吧 ”, 然后决定去搜寻与此相关的书籍来读
        ls-type:: annotation
        hl-page:: 76
        hl-color:: yellow

      • 第一种筛选法是一种利用朋友、 熟人的口碑来找寻好书的方法。
        ls-type:: annotation
        hl-page:: 81
        hl-color:: yellow

        • 把自己读过的书分享给别人去读,还有其他的好处:那就是读了同样的书之后 , 能产生共识。
          ls-type:: annotation
          hl-page:: 85
          hl-color:: yellow
      • 第二种筛选, 即网络杂志。
        ls-type:: annotation
        hl-page:: 87
        hl-color:: yellow

      • 第三种筛选是参考报纸和杂志的书评栏来选书的一种方法。
        ls-type:: annotation
        hl-page:: 91
        hl-color:: yellow

      • 最后还有一种方法, 就是利用付费的书评服务。
        ls-type:: annotation
        hl-page:: 94
        hl-color:: yellow

    • 依直觉 选书
      ls-type:: annotation
      hl-page:: 76
      hl-color:: yellow

  • 网络书店对有目的的购买来说是便利的,而实体书店在发现新书上是便利的。
    ls-type:: annotation
    hl-page:: 114
    hl-color:: yellow

第 3 章 一曰一本, 有策略地读通商业书

ls-type:: annotation
hl-page:: 116
hl-color:: yellow

  • 在第三章“一日一本 ,有策略地读通商业书”中, 整理出营造实践多读的环境 ,以及活用 “80/20法则”的 要点;也就是介绍这些有效而且不需要训练的读书方法。
    ls-type:: annotation
    hl-page:: 11

  • 读书的流程

    • [:span]
      ls-type:: annotation
      hl-page:: 118
      hl-color:: yellow
  • 在开始渎之前 , 有非做不可的重要工作 。那就是 ,读每一本书前 , 都要明确读此书的目的。
    ls-type:: annotation
    hl-page:: 117
    hl-color:: yellow

    • 在杠杆效益阅读法中 ,读书并不是消磨时间, 而是一种投资。
      ls-type:: annotation
      hl-page:: 118
      hl-color:: yellow

    • 你逐渐就能弄清楚书中重要的部分和不重要的地部分。 因此 ,你会舍弃无关紧要的部分,读书的速度就自然加快了。
      ls-type:: annotation
      hl-page:: 118
      hl-color:: yellow

    • 彩色浴

      • 这可以用 《考具 》一书中出现的 “ 彩色浴 ”说法来加以解释。所谓的 “彩色浴 ”说明如下 。
        hl-page:: 121
        ls-type:: annotation

        • 举例来说, 出门前你想着:“今天一整天, 我会见到几个红色的东西呢?”于是 ,走在街道上你会惊讶:“世上充满了这么多红色的东西! ”红色的海报、文字招牌 、红花等等, 所有红色的东西都进入眼帘。当然, 并不是过了一个晚上,红色的东西就暴增 。而只是你产生意识后,这东西就自然进入你的眼里。 附带一提的是, 彩色浴的 “浴”, 英文是“bath”, 也就是被颜色浸润的意思 。
          ls-type:: annotation
          hl-page:: 121
          hl-color:: yellow
      • 熟练使用“彩色浴 ”效果 ,就算你快速翻阅书本 ,眼睛也能停在目的所在之处。
        ls-type:: annotation
        hl-page:: 121
        hl-color:: yellow

    • 读书的目的 试着一个一个写出来(就写在书本开头的空白页面上 ),只要花这样的时间, 并在心里产生意识就够了。
      ls-type:: annotation
      hl-page:: 122
      hl-color:: yellow

      • 举例来说,读成功经营者所写的书时,“尽可能多多发现自己立刻就能模仿的要点”;或是读对话技巧的书时,则“想运用在实际的会话中的措辞, 就在旁边画线”。
        ls-type:: annotation
        hl-page:: 122
        hl-color:: green
    • 给自己的目标暗示, 会在读书的时候不断出现在脑海中 ,碰到时就立即透过折角 、 画线、 在书页四周做笔记的方法记下(后面会再详加说明)。
      ls-type:: annotation
      hl-page:: 122
      hl-color:: yellow

  • 寻找固定的读书时间和读书环境

    • 与其分散时段读书,还不如自行设定每天几点到几点 ,这样事先订好时间,然后变成习惯,也易于持续下去 。
      ls-type:: annotation
      hl-page:: 124
      hl-color:: yellow

    • 好的商业书会带给人勇气和干劲。 在阅读之际 , 潜力逐渐被激发出来, 冲劲也展现出来。如此一来, 一大早潜力就被激发出来,则一整天保持着积极的情绪。
      ls-type:: annotation
      hl-page:: 125
      hl-color:: green

  • 设定时间限制

    • 忙碌的商人一边工作一边读书,这是需要技巧的 。 技巧之一就是 , 在开始读一本书之前,自己决定 “这本书大概在这样的时间内读完”。
      ls-type:: annotation
      hl-page:: 129
      hl-color:: yellow

      • 如果没有限期, “什么时候读完都可以 ”的话, 恐怕连一半都读不到。 因为人没有被逼迫时, 很难发挥更大的潜力。
        ls-type:: annotation
        hl-page:: 130
        hl-color:: green
  • 掌握 60% 就可以了

    • 总之, 与其选出全部的一百项来读, 而没有学到一项,还不如只选出重要的一项来实践,才能有所回报。 与其在意小遗漏 , 而使速度变慢 ,还不如把精力放在以较少的劳力创造大大的回报上比较好 。
      ls-type:: annotation
      hl-page:: 133
      hl-color:: yellow

    • 一本书的重点大约只占全部内容的两成(这我会在下一章节详细说明) ,而掌握到重点的八成就可以了 。 也就是说, 一本书里, 重点只占20%,再抽出其中的80%,也就是整本书的16%; 若以200页的书来看 , 总共只有32页。
      ls-type:: annotation
      hl-page:: 133
      hl-color:: yellow

  • 80/20 法则

    • 把读书视为投资来看, 你从书本里得到80% 的回报, 只要靠读20%的内容就可获得 。所以 , 一本书就算没有从头到尾全部读完, 但只要读区区的20% , 就大致了解了这本书的作者真正想主张的东西 。
      ls-type:: annotation
      hl-page:: 136
      hl-color:: yellow

    • “如果是好书的话就特别花上5个小时细读吗?”才没这回事。和花在读其他书上的时间一样,大概一个小时。 像描写原理、 原则这样的好书,在适合自己程度的情况下, 有时也会读好几次, 而这是例外。将重要的部分画上线, 之后, 回过来只要读画线的地方 ,并实践它, 以表示确实学会了(这在下个篇章加以说明) 。
      ls-type:: annotation
      hl-page:: 138
      hl-color:: yellow

  • 浏览一本书的内容

    • 首先要看的 , 是位于封面勒口和版权页上的作者简介。
      ls-type:: annotation
      hl-page:: 139
      hl-color:: yellow

    • 其次 , 我会读书腰 、 封底。 之后 ,再看前言、目录。有时,我会在目录上标记号。 然后,读最后的后记。 只要这样 ,就能看到整本书的轮廓 。开始读正文之前,脑海中只要备有这些内容 ,读这本书的目的就被重新确认了 。
      ls-type:: annotation
      hl-page:: 140
      hl-color:: yellow

      • 附带一提的是 ,我一开始就觉得没意思的书,马上就放会弃阅读。
        ls-type:: annotation
        hl-page:: 140
        hl-color:: green
    • 此外 , 有的书在每一章的开始或结束的地方,会把这章的内容做成“摘要 ”条列出来( 本书也是如此 )。 由于精华集结在此 , 所以先读它也可以,这也是一个方法 。
      ls-type:: annotation
      hl-page:: 141
      hl-color:: yellow

  • 不好的书马上丢掉

    • 杠杆效益的阅读本质上不是读书, 而是投资行为。 所以必须具备这样的判断力。所谓的 “丢弃”并非指不要阅读。照字面来说, 是把垃圾丢出去 。
      ls-type:: annotation
      hl-page:: 143
      hl-color:: yellow

    • 不好的书尽早放在一边, 拿下一本书来读,这是要诀。读下一本更好的书, 并赚到15万日元 ,才是投资上有效率的表现。
      ls-type:: annotation
      hl-page:: 143
      hl-color:: yellow

    • 在有效率地读书上 , 如何具备“舍弃没用部分 ”的勇气 ,是重点所在。读了大约15分钟 , 就能判断这本书是否不好 。
      ls-type:: annotation
      hl-page:: 143
      hl-color:: yellow

第 4 章 不要读完就算了

ls-type:: annotation
hl-page:: 164
hl-color:: yellow

  • 不要读完后就放着不管了,读完之后所需要的 ,就是第四章 “不要读完就算了!”所要介绍的内容, 也就是本书能成为活用在商场上的最终书籍的“杠杆效益笔记”的制作方法, 以及利用空间时间反复浏览这些笔记,让自己能够达到直觉反应的程度的方法 , 并且说明今后如何学以致用。
    ls-type:: annotation
    hl-page:: 11

  • 评价读书是否有效益

    • 应该以 “只有多少精华能成为自己的东西 ” “有多少东西能运用在现实的商业上 ”来作评价
      ls-type:: annotation
      hl-page:: 168
      hl-color:: yellow
  • 要把好不容易读完的内容变成自己的东西 ,难道没有最好的方法吗?
    ls-type:: annotation
    hl-page:: 170
    hl-color:: yellow

    • 像准备考试那样的做法是最好的。 总而言之,过去为考试而用功时, 大致上应该是用下页图中所示的做法,来深入理解书中的内容。
      ls-type:: annotation
      hl-page:: 170
      hl-color:: yellow

    • [:span]
      ls-type:: annotation
      hl-page:: 171
      hl-color:: yellow

    • 我把画线的部分打进电脑里, 做成笔记。这个笔记集结了各种书中对我而言的 重点:一言以蔽之, 即犹如 “终极本” 一般的东西 。
      ls-type:: annotation
      hl-page:: 172
      hl-color:: yellow

  • 杠杆效益笔记

    • 说到 “方法 ”,只不过是把内容打进电脑里 , 然后再打印到A4纸上。 经常把它带在身上, 偶尔拿出来反复阅读。而且 ,这个时候只读适合自己的部分 。
      ls-type:: annotation
      hl-page:: 173
      hl-color:: yellow

    • 这份打印稿虽然用文件夹夹着,但由于经常拿出来看, 所以纸张都变得皱巴巴的 。 如果变成这样, 就再重新打印一份。我就是这样反复去做 。
      ls-type:: annotation
      hl-page:: 174
      hl-color:: yellow

    • 与其读完后马上整理 ,还不如搁置几天后再打进电脑里比较好。这是因为刚读完时,不具有客观性的观点。稍微冷静之后再阅读时, 你可能会认为有些内容没那么重要 ,或是内容有所重复。 批次性地集中起来打进电脑, 也有这样的好处。
      ls-type:: annotation
      hl-page:: 177
      hl-color:: yellow

    • 笔记分类

      • 主题类

        • [:span]
          ls-type:: annotation
          hl-page:: 181
          hl-color:: yellow
      • “参考资料 ”是指 , 遇到自己业务上需要的数据时, 就算画不出图表来, 也可以参考笔记。
        ls-type:: annotation
        hl-page:: 180
        hl-color:: yellow

      • “引用文句”是指 , 看到令人感动的言词时,写清楚是谁说的, 并把它打进电脑里。 附带一提的是 ,本书各篇章的开头也都用到引用文 。
        ls-type:: annotation
        hl-page:: 180
        hl-color:: yellow

    • 发现一个能够实践的重点,远比精读笔记,发现一百个重点来得更有效果 。 再来是 ,请在实践中修正并应用,创造出适合自己的东西 。
      ls-type:: annotation
      hl-page:: 183
      hl-color:: yellow

  • 然而基本上,读过的书就不要再拿来读第二次 。 要读的话,就读笔记。
    ls-type:: annotation
    hl-page:: 188
    hl-color:: yellow

    • 我会例外地读第二遍的书,在我一年读的 400本书中, 大概占5%,也就是大约20本。由于这20本是相当好的书, 所以我会不断跟周围的人推荐 。之后,自己反复去读。
      ls-type:: annotation
      hl-page:: 188
      hl-color:: yellow
  • 商业书推荐

    • 人性的弱点

    • 基业长青

  • 杠杆阅读术里强调的是 , 把重点浓缩后 ,反复多读几次书中的精华 。 也就是说, 把书本读完之后 ,也还要持续阅读。实践书中的精华 , 然后再加上自己的解释, 例如"利用这个观念可以让事情进行得顺利 ” “这个稍微不适合自己 ”, 或是“ 把这个这样做,还不错”。这样一来,书中的精华刻印在脑里 ,并实际地做做看 , 因而产生书籍费用的一百倍价值。
    ls-type:: annotation
    hl-page:: 193
    hl-color:: yellow

  • 利用书架分类

    • [:span]
      ls-type:: annotation
      hl-page:: 197
      hl-color:: yellow
  • 靠实践活用知识
    ls-type:: annotation
    hl-page:: 199
    hl-color:: yellow

    • 把笔记的内容加以实践、 活用 ,逐渐做到能够做出直觉反应的程度。
      ls-type:: annotation
      hl-page:: 203
      hl-color:: yellow

A Survey of Transformers

[[PTM]] pre-train-model

17 年 Google 发表论文 「Attention is all you need」提出 Transformers 框架,之后一大批人在此基础上进行研究和应用。原始 Transformer 改进的变体被称为 「X-formers」。

X-formers 改进方向有三个:

  • Model Efficiency

    • self-attetion 带来的计算量和参数量(内存)

      • sparse attention 轻量级注意力机制方案

      • divide-and-conquer methods 分治方法

  • Model Generalization

    • 框架灵活,对数据没有太多的结构偏置

    • 训练需要数据量大

    • structural bias or regularization, pre-training on large-scale unlabeled data

  • Model Adaptation

    • 将 Transformer 应用到具体的下游任务中。

背景知识

模型使用形式

  • Encoder-Decoder

  • Encoder only

    • classification or sequence labeling
  • Decoder only

    • sequence generation

      • language modeling

根据对原始 Transformer 的改进分类:architecture modification, pre-training, and applications

  • architecture modification

    • Module Level

      • [[Attention]]

        • 挑战

          • 计算复杂度,受序列长度影响

          • Structural prior 没有结构先验,在小数据集上容易过拟合

        • Sparse Attention

          • token i 和 j 有关系的情况下计算 attention,以稀疏矩阵形式保存

          • 如何定义关系

            • position-based

              • 计算指定位置之间的 attention

              • atomic sparse attention

                • Global

                • Band

                • Dilated

              • 组合 atomic attention 得到更加复杂的attention计算规则

            • content-based

              • Routing Transformer

                • Efficient Content-Based Sparse Attention with RoutingTransformers

                • 聚类

              • [[Reformer]]

                • 使用 LSH,同一个分桶内的 token 计算 attention

        • [[Linearized Attention]]

          • QKV 计算 Attention 的复杂度是 $$O(T^2D)$$,通过引入核函数降低到 $$O(TD)$$

          • key components

            • kernel feature map

              • Performer 用其他函数去拟合 attention 函数

                • FAVOR+ Fast Attention Via positive Orthogonal Random features approach

            • aggregation rule

        • Query Prototyping and Memory Compression

        • Low-rank Self-Attention

          • attention 矩阵线性相关的行数 A 远小于输入 T

          • Low-rank Parameterization

          • Low-rank Approximation

        • Attention with Prior

          • 分成 generated attention 和 prior attention 两部分,下面的方法都是生成 prior attention 尝试

          • Prior that Models locality

            • 文本之类的数据对位置敏感,使用 i 和 j 的位置,结合[[Normal Distribution]]计算先验信息

          • Prior from Lower Modules

            • 使用之前层的注意力分布结果

            • Realformer 将 [[ResNet]] 结构放到 Attention 矩阵中

            • Lazyformer 每两层计算一次 Attention 矩阵

          • Prior as Multi-task Adapters

            • 多任务适配器,看起来是在共享参数

          • Attention with Only Prior

            • 只使用先验
        • Improved Multi-Head Mechanism

          • Head Behavior Modeling

          • Multi-head with Restricted Spans

            • 观察到原始中部分 head 关注局部,部分关注全局

            • 限制 attention 的范围(通过距离实现)

            • decoder 中 mask-multi-head 就是这个思路

          • Multi-head with Refined Aggregation

            • 多头的结果如何合并

            • routing methods

          • Other Modifications

            • Shazeer multi-query attention 所有头之间共享 kv

            • Bhojanapalli 灵活设置 head size

      • OTHER MODULE-LEVEL MODIFICATIONS

        • Position Representations

          • Transformer 具有排列不变性,需要而外位置信息

          • Absolute Position Representations

            • 正余弦编码

            • 位置向量

          • Relative Position Representations.

            • token 之间的关系更加重要

            • 将 embedding 加到 key 的attention中

            • Transformer-XL

          • Other Representations

            • TUPE

              • 混合相对和绝对位置
            • Roformer

              • 旋转位置编码

              • 线性 attention 中实现相对位置编码

            • Position Representations without Explicit Encoding 不要编码

              • R-Transformer 先过 RNN 再将输出结果输入到多头

              • CPE 使用卷积

            • Position Representation on Transformer Decoders

              • 移除 pe
        • LayerNorm

          • Placement of Layer Normalization

            • post-LN

            • pre-LN 保证 skip 链接路上没有其他操作

          • Substitutes of Layer Normalization

            • 可学习参数效果不好,

            • AdaNorm

            • scaled l2 normalization

            • PowerNorm

          • Normalization-free Transformer

            • ReZero 可学习残差模块替代 LN
        • FFN

          • Activation Function in FFN

            • [[Swish]]

            • [[GPT]] [[GELU]]

          • Adapting FFN for Larger Capacity

            • product-key memory layers

            • MoE

              • 取 top k 专家

              • 取最大专家

              • 分组取各自 top1

          • Dropping FFN Layers

            • 简化网络

    • Arch. Level

      • Adapting Transformer to Be Lightweight

        • Lite Transformer

        • Funnel Transformer

          • hidden sequence pooling and up-sampling
        • DeLighT

          • DeLighT block
      • Strengthening Cross-Block Connectivity

        • 针对 decoder 解决问题

        • Transparent Attention

        • Feedback Transformer

          • 使用前一步所有层的信息
      • [[Adaptive Computation Time]]

        • 解决之前模型中层数固定

        • 三种方法

          • [[Universal Transformers]]dynamic halting

            • 达到停止条件的 token 不再改变
          • CCT

            • 跳层
      • Transformers with Divide-and-Conquer Strategies

        • 将 LM 任务中长文本拆分成多个片段

        • Recurrent Transformers 上一个 T 输出信息输入到下一个输入

          • Transformer-XL 上一个输出和下一个输入 concat 在一起

        • Hierarchical Transformers 多个结果聚合

          • Hierarchical for long sequence inputs

            • sentence Transformer and document Transformer
          • Hierarchical for richer representations 更丰富的表示

            • 字母级别表示和词级别表示
      • Exploring Alternative Architecture

        • NAS
    • PRE-TRAINED TRANSFORMERS

    • APPLICATIONS OF TRANSFORMER

      • CV

        • [[ViT]]
    • CONCLUSION AND FUTURE DIRECTIONS

      • 理论分析

      • 更好全局交互机制

      • 处理多种类数据的框架

[[Layer Normalization]]


AFM

AFM(Attentional Factorization Machine), 在 FM 的基础上将 Attention 机制引入到交叉项部分,用来区分不同特征组合的权重。

y^AFM(x)=w0+i=1nwixi+pTi=1nj=i+1naij(vivj)xixj\hat{y}_{A F M}(\mathbf{x})=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\mathbf{p}^{T} \sum_{i=1}^{n} \sum_{j=i+1}^{n} a_{i j}\left(\mathbf{v}_{i} \odot \mathbf{v}_{j}\right) x_{i} x_{j}

单独看上面公式中的第三项结构:

Embedding Layer 与 NFM 里面的作用一样,转化特征。

Pair-wise Interaction Layer 是将特征两两交叉,如果对这一步的结果求和就是 FM 中的交叉项。

Attention 机制在 Attention-based Pooling 层引入。将 Pair-wise Interaction Layer 中的结果输入到 Attention Net 中,得到特征组合的 score aij{a_{i j}^{\prime} },然后利用 softmax 得到权重矩阵 aij{a_{ij}}

aij=hTReLU(W(vivj)xixj+b)aij=exp(aij)(i,j)Rxexp(aij)\begin{aligned} a_{i j}^{\prime} &=\mathbf{h}^{T} \operatorname{Re} L U\left(\mathbf{W}\left(\mathbf{v}_{i} \odot \mathbf{v}_{j}\right) x_{i} x_{j}+\mathbf{b}\right) \\ a_{i j} &=\frac{\exp \left(a_{i j}^{\prime}\right)}{\sum_{(i, j) \in \mathcal{R}_{x}} \exp \left(a_{i j}^{\prime}\right)} \end{aligned}

最后将 Pair-wise Interaction Layer 中的二阶交叉结果和权重矩阵对应相乘求和得到 AFM 的交叉项。

Question

  • AFM 如何引入 Attention 机制?

    • 根据 <vi,vj>xixj<v_i, v_j>x_i x_j 计算交叉特征的权重

AUUC

[[UPlift Model]] 目标是学习个体潜在弹性 τ=Y(1)Y(0)\tau=Y(1)-Y(0)
,没有标签。

计算过程

  • 数据集 D=(Yiobs ,WiD=\left(Y_i^{\text {obs }}, W_i\right., score i)\left._i\right)

    • W 是样本所在的组,1 为实验组,0 为空白组

    • Y_obs 是观测到的样本响应信号

    • socre 是样本的 uplift 值

  • 按 socre 从大到小排序,第 k 个的 uplift 值

    • u(k)=RT(D,k)NT(D,k)RC(D,k)NC(D,k)u(k)=\frac{R^T(D, k)}{N^T(D, k)}-\frac{R^C(D, k)}{N^C(D, k)}

      • RT(D,k)=YiobsI(Wi=1)R^T(D, k)=\sum Y_i^{o b s} \mathbb{I}\left(W_i=1\right) 排在前 k 个样本中属于实验组的人的响应之和

      • RC(D,k)=YiobsI(Wi=0)R^C(D, k)=\sum Y_i^{o b s} \mathbb{I}\left(W_i=0\right) 空白组的人的响应之和

      • NT(D,k)=I(Wi=1)N^T(D, k)=\sum \mathbb{I}\left(W_i=1\right) 前 k 实验组人数

      • NC(D,k)=I(Wi=0)N^C(D, k)=\sum \mathbb{I}\left(W_i=0\right) 前 k 空白组人数

      • 避免实验组和对照组用户数量差别较大导致指标不可靠

      • 全量人群的 [[Average Treatment Effect]]

    • 含义:前 k 个样本中实验组平均产生的价值 - 前 k 个样本中空白组平均产生的价值

  • 计算 AUUC=Snu(n)A U U C=\frac{S}{n * u(n)}

    • S=k=1n(u(k)k)S=\sum_{k=1}^n(u(k) * k)

      • (u(k)k)(u(k) * k) 代表前 k 个人产生的 uplift 值

Ref

  • 实现 [[causalml]]

    • lift.plot x=k, y=u(k)

    • gain.plot x=k, y= k*u(k)

  • 弹性模型的评测指标AUUC - 知乎

    • 画 [[auuc/code]]

    • auuc_score['random'] 值含义是什么?

      • 无规律排序下,实验组相对于控制组的期望增值

      • TODO 在大多数情况下,使用归一化的auuc_score(normalize=True)函数计算得到的random值应该接近0.5,gain.plot()画出的random应该是一条直线。原因是在多次随机排序下,期望增值应该是稳步上升的。

      • 假如random值不是0.5,图像不是直线时,这意味着什么?

        • 导致不是0.5的背后原因可能有很多,可以先分析下是不是以下三种情况。

          • 1.实验组和空白组不是平衡的,两者人群不是同质的,这时算AUUC没有很大的意义了,应该调平人群后再计算。

          • 2.样本的y值即响应信号的离群点比较多。

          • 3.样本量太小,无法支撑实验组和对照组的匹配。

        • 除此之外,还有一种情况是random值为-0.5,这时整体的ATE为负数,所有样本均为负弹,这时候uplift值不再是“收益”,更像是“花销”。

  • [[@DiDi Food中的智能补贴实战漫谈]]

image.png


ARIMA

适用情形:平稳的时间序列

平稳性和差分

[[平稳性]]:平稳的时间序列的性质不随观测时间变化而变化,具有 趋势性或季节性 的时间序列是非平稳的。

  • 白噪声序列是平稳的,也是 随机不可 预测的。
  • 平稳的时间序列的ACF会 快速下降到接近0
  • [[单位根检测]]是一种常用的判断数据是否平稳的方法。

[[差分]] 计算了观测值之间的差值,衡量的是两者间的 变化/斜率 ,经过一次或多次差分后可以得到平稳的时间序列

  • 在点预测时只需要进行 差分的逆运算 就行,分布预测的情况会更复杂一些。
    一种常用的变换是对数变化,它可以用于平稳时间序列的方差,在时间图中方差可以理解为 上下波动 的程度。
    [[延迟算子]]:延迟算子表示时间序列的延迟,由于符合代数变换的规则,可以方便地表示差分的组合。图 1.11显示了几种常见的差分/组合的延迟算子表示。#card
    image.png

步骤 #card #incremental #depth-1

  • 对序列进行 ADF 检验,观察序列是否平稳 #card

    • 对于非平稳的时间序列要先进行 d 阶差分,转化为平稳时间序列
  • 对平稳的时间序列分别求 ACF 和PACF,两个图求出最佳阶数 p、q #card

    • 拖尾指序列以指数率单调递减或震荡衰减,而截尾指序列从某个时点变得非常小

image.png

+ 平衡预测误差与模型复杂度

  + AIC 准则全称是[[最小化信息量准则]](Akaike Information Criterion) #card


  + BIC(Bayesian InformationCriterion)[[贝叶斯信息准则]] #card
  • 根据 p d q 得到模型,对模型的结果进行校验

Alfred

提高使用率的第一步,整理默认搜索支持常见的(谷歌、百度、知乎、微博、淘宝、b站)等等

多站点搜索,同时打开多个搜索页面

Force keyboard 强制默认输入法

Features

Default Results

  • Applications

    • 「Match Application’s keywords in default results」可以匹配应用的元数据。

    • Extras 添加额外搜索

Advanced-Syncing 终于发现如何在不太的 mac 之间同步配置,现在在大白中完成配置,让小灰同步即可。

其他

Snippets

Search 拓展

  • 搜索自己的推特 https://twitter.com/search?q={query}%20(from%3Axiang578)&src=typed_query

使用 iTerm 2 做为终端:https://gist.github.com/xiang578/c8b504bdf9a34cd14e3acd95695ad773

调出时所在屏幕,激活窗口:Appearance > Options

快捷键

文件处理

  • ’ 文件搜索~

  • ~ / 文件浏览器 ⌘+下键

  • 对文件点击向右方向键,查看对文件的操作

  • previous 上一次浏览的路径

  • shift 预览文件

  • open 打开项目,选中项目后按 ⇧Shift 键预览项目

除了空格键外,你还可以在前面加上 open 以打开文件,f 在 Finder 中查看,in 搜索文档内文字,tags 搜索指定标签文件。

在回车打开文件前,不妨先按下 ⌥Option + ⌘Command + \,你会发现 Alfred 已经为你准备了解压、复制、分享、查重等数项常用操作

Clipboard 粘贴板历史

Snippets 快捷短语

一站式文件处理中心:Alfred 文件搜索 & 处理详解 - 少数派

⌘Command-C 复制路径

⌘Command-Y 预览

搜索结果可以直接拖拽到其他软件中,按⌘Command移动,按 ⌥Option 是复制

搜索后的文件可以通过右方向键打开 action 窗口。

Workflow

See Also


AdamW

[[L2 Regularization]] 和 [[Weight Decay]] 在 Adam 这种自适应学习率算法中并不等价

使用 Adam 优化带 L2 正则损失并不有效

  • 正常权重衰减是对所有权重都采用相同的系数进行更新,本身比较大的权重对应的梯度也会比较大,惩罚也越大。

  • Adam 计算步骤中减去项会除以梯度平方的累积,使梯度大的减去项偏小,从而大梯度的权重不会像解耦权重衰减那样得到正则化。

红色部分 Adam + L2 regularization,line 12 中 L2 部分会被二阶梯度调整,梯度变化快的方向上,调整之后的值比较小,这个方向上正则化更少。

  • θtθt1aβ1mt1+(1β1)(ft+λθt1)V^t+ϵ\theta_t \rightarrow \theta_{t-1}-a \frac{\beta_1 m_{t-1}+\left(1-\beta_1\right)\left(\nabla f_t+\lambda \theta_{t-1}\right)}{\sqrt{\hat{V}_t}+\epsilon}

  • 分子右上角的 λθt1\lambda \theta_{t-1} 向量各个元素被分母 V^t\sqrt{\hat{V}_t} 项调整。

    • 梯度变化快的方向上,V^t\sqrt{\hat{V}_t} 有更大的值,从而使调整后的 λθt1V^t\frac{\lambda \theta_{t-1}}{\sqrt{\hat{V}_t}} 更小

作者提出以绿色的方式来在 Adam 中正确引入 weight decay ,使用相同的参数来正则化所有的权重,完成梯度下降与 WD 的解耦。

AdamWeightDecayOptimizer 通过 [[Weight Decay]] 参数控制

[[BERT]] 中使用 AdamW

都9102年了,别再用Adam + L2 regularization了 - 知乎


Andy Matuschak

#People

[[Evergreen notes]] 的网站而火

  • 阅读 My morning writing practice
    下来的体验,笔记的标题可以是另外笔记的内容,这不是刻意打造出来,真的把方法论融入到骨髓里面。

    • 像自己这样,用关键字做为标题,无法达到高度有效的链接。

    • 每一篇笔记没有必要太长,Roam 提供很多工具可以让你进行不同层次的引用。

    • 每天坚持去写!

§Note-writing systems

DONE [[@How to write good prompts: using spaced repetition to create understanding]][[2022/10/28]] 举例介绍如何写卡片
My morning writing practice

  • 0730-1000 35分钟写作/5分钟休息

  • 目标:

    • 普通:记录其他人的想法或者是发生的事情

    • 进阶:创造新的想法 [[Evergreen notes]]

  • DONE writing inbox:收集写作思路

    • 挑选出想写的主题,写 evergreen note

    • memo pad:小笔记本记录外出时想到的话题

  • primary creative projects

    • what are the most important unknowns for this project?

    • what new ideas am I excited about?

    • what are the most interesting things I know about this project?

    • 记录到 working log 中

  • write about what you read

  • My daily routine

    • 通过 routine 引导生活

    • 1000 之前不使用互联网,防止大脑被扰。

    • Daily working log

      • 记录 reflections, scratch work

      • 给予如何过好这一天的压力

      • 通过什么内容记录这一天。

Interface for writing spaced repetition prompts inline while reading web content (andymatuschak.org) 阅读网页时写 anki 卡片流程

  • 导出效果

The mnemonic medium can be extended to one’s personal notes 回顾个人笔记

Orbit


Anki 卡片状态

已暂停 :-> 以后会不出现
已搁置 :-> 第二天再学习


Anki

简单而强大的 flashcard 软件,可以实现知识的[[Spaced Repetition]]。

一些可以思考的问题

  • 什么是需要制作卡片记忆的内容?

  • 观察不同时间段anki回顾的正确率区别,早晚会有区别吗?

  • 如何衡量卡片是不是原子级别的?平均回顾时间低于10s

使用记录

  • logseq 同步卡片

  • 复制过程中发现需要修改的卡片,搁置卡片等到能用电脑再修改。

    • 电脑端使用快捷键 -

    • 移动端,复习界面设置显示搁置按钮

选项

  • 步伐:一张卡片学几次

记忆难点(Leech)

  • 8 次遗忘,会被暂停

[[Note2Anki]]


BERT

[[@BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding]]

代码:google-research/bert: TensorFlow code and pre-trained models for BERT

大模型 + 微调提升小任务的效果

输入层

  • 词嵌入(token embedding)、位置嵌入(position embedding)段嵌入(segment embedding)

    • 预训练任务包含判断 segment A 和 segment B 之间的关系
  • 模型结构 12 层,每层 12 个 multi-head

  • CLS 句子开头,最后的输出 emb 对应整句信息

    • 无语义信息的符号会更公平地融合文本中各个词的语义信息,从而更好的表示整句话的语义
  • SEP 句子之间分割

BERT

  • L=12 H=768 A=12, Total Parameters=110M

  • L=24 H=1024 A=16, Total Parameters=340M

两种 NLP 预训练

    1. 产出产品,例如 word2evc 的 embedding
    1. 做为骨架接新结构

[[ELMo]]

  • 使用 LSTM 预测下一个单词

[[GPT]]

  • Transformer

  • 单向

-w1304

贡献性

  • 双向信息重要性

模型输入:

    1. Token emb
    1. Segment emb(A B) 针对 QA 或者两个句子的任务
    1. Position emb

训练方式

  • [[Masked-Language Modeling]] :->mask 部分单词,80 % mask,10 % 错误单词, 10% 正确单词

    • 目的 :-> 训练模型记忆句子之间的关系。
      • 减轻预训练和 fine-tune 目标不一致给模型带来的影响
  • [[Next Sentence Prediction]] :-> 预测是不是下一个句子

    • 句子 A 和句子 B 有 50% 的概率是上下文

    • 解决后续什么问题 :-> QA 和自然语言推理
      image.png
      occlusion:: eyIuLi9hc3NldHMvaW1hZ2VfMTczNDYxNjMzODQyMV8wLnBuZyI6eyJjb25maWciOnt9LCJlbGVtZW50cyI6W3sibGVmdCI6MzY3LjEzMDExNTk3NDg1MjYsInRvcCI6NTkuNDE3NTUwMDkwNDM3Mzk1LCJ3aWR0aCI6NjIzLjU5MTg3MjM5Mzc2MDksImhlaWdodCI6MTE4LjgzNTEwMDE4MDg3NDc2LCJhbmdsZSI6MCwiY0lkIjoxfSx7ImxlZnQiOjEwODEuOTAzNDAxNTY2MDE5LCJ0b3AiOjY1LjA2OTA2NDM1NDU0MTcsIndpZHRoIjo2NjUuMjAzOTI0MjY0NDI2LCJoZWlnaHQiOjkwLjM5NTU1NzkzMTAxMTA3LCJhbmdsZSI6MCwiY0lkIjoyfV19fQ==
      [[激活函数]] [[GELU]]

  • 和 [[GPT]] 一致,为什么?

优化器

  • 不完整版 adam

  • fine tune 时可能不稳定,需要换成正常版 adam

fine tune

  • 根据任务调整输入和增加预测结构,使用相关数据训练

  • 使用 fine tune 比将bert做为特征放到模型中效果要好

    1. 双句分类
    1. 单句分类
    • CLS 后接 softmax
    1. 预测一个 start 和 end embedding,然后和 T 计算 softmax 取概率最大的做为开始和结束的位置
    1. 实体标注

研究取不同的 embedding 效果

缺陷

  • 不擅长生成类任务(机器翻译、文本摘要)

[[Ref]]


Attention

ci=j=1Txαijhjc_{i}=\sum_{j=1}^{T_{x}} \alpha_{i j} h_{j}

  • αij=exp(eij)k=1Txexp(eik)\alpha_{i j}=\frac{\exp \left(e_{i j}\right)}{\sum_{k=1}^{T_{x}} \exp \left(e_{i k}\right)} 是隐藏状态 hjh_j 的权重

    • 用 softmax 得到一个强度表征

    • 为什么需要使用 softmax 做归一化 #card #incremental

      • 避免 attention score 数值过大,导致优化不稳定(数值小的部分)

      • 保证 score 非负

eij=a(si1,hj)e_{i j}=a\left(s_{i-1}, h_{j}\right) 是注意力打分机制

  • 代表 :-> 解码器状态 si1s_{i-1} 和解码器状态 hjh_j 之间的匹配程度

  • 常用的注意力计算方式

    • 加性模型 :-> s(xi,q)=vTtanh(Wxi+Uq)s \left(\mathbf{x}_{i}, \mathbf{q}\right) =\mathbf{v}^{\mathrm{T}} \tanh \left(W \mathbf{x}_{i}+U \mathbf{q}\right)
      • qkv 矩阵较大时效果超越 dot production
    • 点积模型 :-> s(xi,q)=xiTqs\left(\mathbf{x}_{i}, \mathbf{q}\right) =\mathbf{x}_{i}^{\mathrm{T}} \mathbf{q}
      • 不需要额外参数,但是两个矩阵大小需相同
    • 缩放点积模型 :-> s(xi,q)=xiTqds\left(\mathbf{x}_{i}, \mathbf{q}\right) =\frac{\mathbf{x}_{i}^{\mathrm{T}} \mathbf{q}}{\sqrt{d}}
    • 双线性模型 :-> s(xi,q)=xiTWqs\left(\mathbf{x}_{i}, \mathbf{q}\right) =\mathbf{x}_{i}^{\mathrm{T}} W \mathbf{q}
      聚焦式(focus)注意力:
  • 自上而下的有意识的注意力,主动注意——是指有预定目的、依赖任务的、主动有意识地聚焦于某一对象的注意力。

 Attention (Query, Source) =i=1Lx Similarity (Query, Keyi)Valuei\text{ Attention (Query, Source) }=\sum_{i=1}^{L_{x}} \text{ Similarity (Query, Key}_{i} ) * \text{Value}_{i}

流程可视化

为什么要用 attention

  • 参数少,速度快,能缓解神经网络模型复杂度。解决 RNN 不能并行计算问题

  • 效果显著

按计算区域划分

  • soft-attention(global attention) :-> query 对所有 key 求相似度权重,得到 m*n 的 attention score
    image.png

    • att((K,V),q)=i=1Nαivi=i=1Nexp(s(ki,q))jexp(s(kj,q))vi\begin{aligned} \operatorname{att}((K, V), \mathbf{q}) &=\sum_{i=1}^{N} \alpha_{i} \mathbf{v}_{i} \\ &=\sum_{i=1}^{N} \frac{\exp \left(s\left(\mathbf{k}_{i}, \mathbf{q}\right)\right)}{\sum_{j} \exp \left(s\left(\mathbf{k}_{j}, \mathbf{q}\right)\right)} \mathbf{v}_{i} \end{aligned}
  • hard-attention :-> 直接精准定位到某个 key,其余的 key 不管,单个样本 query 仅对单个 key 进行相似度计算,得到 m*1 的 attention score

  • local-attention :-> hard定位单个key,以这个 key 为中心取周围区域,计算各个窗口的 soft-attention,得到 m*k 的 attention score
    按所用信息

  • general-attention :-> 利用外部信息,用于构建两段文本之间关系的任务

  • [[self-attention]] :-> 只使用内部信息,寻找原文内部的关系。
    按使用模型

  • CNN 是基于 N-gram 的局部编码,RNN 由于梯度消失问题也只能建立短距离依赖。

  • 解决上面的问题有两种方法:利用深层神经网络来获取远距离的信息交互或者是使用全连接网络。

  • [[LSTM]] 对所有 step 的 hidden state 进行加权,注意力集中到整段文本中比较重要的 hidden state 信息。

[[Attention 按 QKV 划分]]

注意力计算方式 Neural Machine Translation by Jointly Learning to Align and Translate

Ref


BN 和 LN

归一化目的是将具有 相同性质的数据 转化成 标准正态分布 ,其结果不会破坏 数据之间的可比较性
LN 的操作可以类比于从一个句子中找到一个中心词,计算所以词和中心词的关系。

为什么处理不定长序列场景需要 LN ? #card

  • 使用 BN padding 部分特征 pooling, 会扰乱正常非 padding 部分特征

BN 和 LN 有哪些区别? #card

  • 做 norm 的维度不同

    • 在哪个维度做 norm,就在其他维度不动的情况下,基于该维度下的所有元素计算均值和方差,然后再做 norm

    • BN 在 batch 维度,LN 一般在最后一维

  • BN 计算代码 :-> for i in range(seq_len): for j in range(hidden_size): Norm([bert_tensor[k][i][j] for k in range(batch_size)])

  • LN 计算代码 :-> for i in range(batch_size): for j in range(seq_len): Norm([bert_tensor[i][j][k] for k in range(hidden_size)])
    [[Ref]]

  • RNN为什么不适合做BN? - 知乎

    • BN 需要记录均值和方差

Bayes theorem

[[Bayesian]]概率:概率很难求,求反概率就很容易。

P(θX)=P(Xθ)P(θ)P(X)P(\theta|X) = \frac{P(X|\theta)P(\theta)}{P(X)}

  • posterior=likehoodpriorevidenceposterior = \frac{likehood * prior}{evidence}

  • posterior 后验概率 P(θX)P(\theta|X) :<-> 通过样本 X 得到 theta 的概率

  • likehood 似然函数 P(Xθ)P(X|\theta) :<-> 通过参数 theta 得到样本 X 的概率

  • prior [[先验概率]] P(θ)P(\theta) :<-> 在试验尚未发生前,对参数 θ\theta 的估计

    • 客观先验概率 :<-> 利用过去历史资料计算出来得到的先验概率
    • 主观先验概率 :<-> 凭主观经验来判断而得到的先验概率
  • evidence :<-> 样本 x 发生的概率
    [[极大似然估计]]

  • 核心思想:当前发生的事件是概率最大的事件,给定数据集,使得该数据集发生的概率最大求模型中的参数。

    • 最大化似然函数 p(Xθ)=x1xnp(xiθ)p(X \mid \theta)=\prod_{x_1}^{x_n} p(x_i \mid \theta)

    • 对似然函数取对数变成对数似然函数方便计算

  • 计算似然估计只关注当前的样本(当前已经发生的事情,不考虑事情的先验情况)

[[最大后验估计]]

贝叶斯估计

See

Ref


Box-Cox transformation

标准变换

  • y(λ)={yiλ1λ, 如果 λ0;ln(yi), 如果 λ=0.y(\lambda)=\left\{\begin{array}{l}\frac{y_i^\lambda-1}{\lambda}, \text { 如果 } \lambda \neq 0 ; \\ \ln \left(y_i\right), \text { 如果 } \lambda=0 .\end{array}\right.

选择 λ\lambda 使得变换后的样本正态性最好

常用 λ\lambda 值,y(λ)=yiλy(\lambda)= y_i^{\lambda}

  • λ=2,y(λ)=yi2\lambda = 2, y(\lambda)= y_i^2

  • λ=0.5,y(λ)=yi\lambda = 0.5, y(\lambda)= \sqrt {y_i}

  • λ=0.5,y(λ)=1yi\lambda = -0.5, y(\lambda)= \frac{1}{\sqrt {y_i}}

  • λ=1,y(λ)=1yi\lambda = -1, y(\lambda)= \frac{1}{y_i}

Ref


Batch Normalization

缓解神经网络“内部协方差漂移”([[Internal Covariance Shift]], ICS)

  • How Does Batch Normalization Help Optimization?

对每个隐藏层输入进行 0-1 标准化

神经网络本身是为了学习数据的分布,如果训练集和测试集分布不同,会导致学习的神经网络泛化性能大大降低

  • 每一层神经网络依赖前一层神经网络,如果前一层分布一直改变,后一层很学习。

网络每次迭代需要拟合不通的数据分布,增大训练的复杂度以及过拟合的风险。

对输入的数据分布进行额外的约束,从而增强模型的泛化能力,但也降低了模型的拟合能力

[[covariate shift]] 源空间和目标空间的条件概率是一致的,但是其边缘概率不同。神经网络的各层输出由于层内操作,其分布显然与各层对应的输入信号分布不同。

在神经网络训练时遇到收敛速度很慢,或者梯度爆炸等无法训练时可以尝试使用。

batch_mean, bacth_var = tf.nn.moments(data, [0]) 求 data 数据的每一列的均值和方差

tf.nn.batch_normalization(data, mean, variance, offset, scale, variance_epsilon, name=None)

  • offset 和 scale 是参数,分别初始化为 0 和 1
  • variance_epsilon 很小的一个值,防止除零
    批归一化也会降低模型的拟合能力,比如 sigmoid 激活函数中,批量归一化后数据整体处于函数的非饱和区,破坏之前学到的连接权重。引入 offset 和 scala 是为了能还原成最初的输入,与之前的网络层解耦。

μi=1Mxi,σi=1M(xiμi)2+ϵ\mu_{i}=\frac{1}{M} \sum x_{i}, \quad \sigma_{i}=\sqrt{\frac{1}{M} \sum\left(x_{i}-\mu_{i}\right)^{2}+\epsilon}

  • 对每个维度的特征计算均值和标准差

image.png

算法流程

image.png
occlusion:: eyIuLi9hc3NldHMvaW1hZ2VfMTcyNDE3MjAzMTgxN18wLnBuZyI6eyJjb25maWciOnsiaGlkZUFsbFRlc3RPbmUiOnRydWV9LCJlbGVtZW50cyI6W3sibGVmdCI6MTkxLjUxNTUyOTA3NzA4ODUzLCJ0b3AiOjE4OS41OTQ0MTY2NTQ0MjUyMywid2lkdGgiOjEzMS4xMTE5ODc5MjE3NDAxNCwiaGVpZ2h0IjoxMTEuMDQ2MzYzNjc5NTEyNjQsImFuZ2xlIjowLCJjSWQiOjF9LHsibGVmdCI6MjM3LjYyNjk0ODU1ODAzOTU0LCJ0b3AiOjI5My41MjM4MzU2MzQwMjc1Mywid2lkdGgiOjIyNS41NTcwNjM5NjcwNjExNywiaGVpZ2h0Ijo4OS43NDU0MTY3MDE4ODkyMSwiYW5nbGUiOjAsImNJZCI6Mn0seyJsZWZ0IjoyNDguMTgyNTc0NzA0MjgxMywidG9wIjozODEuOTEwMzMxMTI3MTkxMzQsIndpZHRoIjoyNDIuMjIzODQyMDkyNzA2MTUsImhlaWdodCI6NzUuMTAwMTE2Njg3NjUwMDcsImFuZ2xlIjowLCJjSWQiOjN9LHsibGVmdCI6MjY2LjUxNjAzMDY0MjQ5MDcsInRvcCI6NDUxLjA3ODgwMTY1ODU3NzEsIndpZHRoIjoyNzguODkwNzUzOTY5MTI0OTQsImhlaWdodCI6NTguOTE0MTUzMDI3MTIyODksImFuZ2xlIjowLCJjSWQiOjR9LHsibGVmdCI6NjAzLjY0ODM4NDc1Njg5NTQsInRvcCI6MTk1LjAyMjI3MzI2Mjk1NTIsIndpZHRoIjoxOTcuOTYzMzQ3MDEzMjc0NTYsImhlaWdodCI6NTQuNDEyOTk1NjA2OTAwNjQsImFuZ2xlIjowLCJjSWQiOjV9LHsibGVmdCI6NTg3LjkyNzU4NTQ5NDI5NTQsInRvcCI6MjkzLjg0NDM0ODI0MTY1MzcsIndpZHRoIjoyMzYuMDcxNjU2Nzg4NzMyNTUsImhlaWdodCI6NDUuNTQ4NjI2MzI2NTA1NzcsImFuZ2xlIjowLCJjSWQiOjZ9LHsibGVmdCI6NjI3LjUzNjE2NDM5MTM4MDgsInRvcCI6MzczLjczOTY1NTI2MDY1MzU0LCJ3aWR0aCI6MTU4LjQsImhlaWdodCI6NDMuNDQ0NjUyNjE4NzA3ODM1LCJhbmdsZSI6MCwiY0lkIjo3fSx7ImxlZnQiOjYxOS40MjY5ODM2MTU4MTI5LCJ0b3AiOjQ0NC41MzkyOTM0MTA5MDQyNCwid2lkdGgiOjE3NS4yOTUwOTc2MjkxMTY5OCwiaGVpZ2h0Ijo0My45ODU0NDY0NzUwMDc5NiwiYW5nbGUiOjAsImNJZCI6OH1dfX0=
原理

    1. 加快网络训练和收敛的速度:每层数据的分布一致
    1. 防止梯度爆炸和梯度消失
    1. BN 防止过拟合:minibatch 中的样本被关联在一起,一个样本的输出取决于样本本身,也取决于同属一个batch的其他样本。

[[Batch Normalization/前向和反向传播]]

[[Batch Normalization/维度理解]]

如何得到预测时 BN 层使用的均值和方差?

    1. 训练时,保留每组 mini-batch 训练数据在网络每一层的均值和方差
    • 均值、方差是基于所有批次的期望计算所得
      • E[x]EB[μB]E[x] \leftarrow E_{B}\left[\mu_{B}\right]
      • Var[x]mm1EB[σB2]\operatorname{Var}[x] \leftarrow \frac{m}{m-1} E_{B}\left[\sigma_{B}^{2}\right]
    1. moving statistics [[Batch Normalization/Moving average]]

为什么BN层一般用在线性层和卷积层后面,而不是放在非线性单元后

  • BN 层希望得到 0-1 高斯分布 的数据

  • 非线性单元之后的数据分布 不一定对称

  • 实践中 BN 放在 ReLU 后面 #card

    • Normalization 一般是在输入层之前对数据处理,Batch-Normalization 可以视作对传给隐藏层的输入的normalization。
  • 放在 tanh 或 sigmoid 之前,可以 避免进入饱和区,缓解梯度衰减问题
    BN 和 [[ReLU]] 的顺序关系?

  • [[ResNet]] :-> Skip -> BN -> RELU -> Conv -> BN -> RELU -> Conv -> Add

    • [[Identity Mappings in Deep Residual Networks]]

image.png

  • BN-ReLU
    • 特点 :-> BN 后输入数据更接近 0 均值,或减轻数据落入负区间梯度消失现象,或更好展现 ReLU 的单侧抑制作用进行特征选择
  • ReLU-BN
    • 特点 :-> 激活后再 Norm,保证下一层的输入是零均值的。
      [[Batch Normalization/多卡同步]]

[[Batch Normalization 为何有效]]

[[Ref]]


Beta 分布

Beta(μa,b)=Γ(a+b)Γ(a)Γ(b)μa1(1μ)b1\operatorname{Beta}(\mu \mid a, b)=\frac{\Gamma(a+b)}{\Gamma(a) \Gamma(b)} \mu^{a-1}(1-\mu)^{b-1}

E[μ]=aa+b\mathbb{E}[\mu]=\frac{a}{a+b}
var[μ]=ab(a+b)2(a+b+1)\operatorname{var}[\mu]=\frac{a b}{(a+b)^2(a+b+1)}

例子 [[@PRML Note 前十一章]] 2-006
ls-type:: annotation
hl-page:: 62
hl-color:: purple
以及 ((654bb13c-db71-49d4-ad0e-123ec812c258))

  • [[二项分布]] 概率函数

    • p(mN,μ)=CNmμm(1μ)Nmp(m \mid N, \mu)=C_N^m \mu^m(1-\mu)^{N-m}
  • 结合 Beta 先验分布,根据[[贝叶斯公式]]后验分布有

    • p(μm,N,a,b)p(mN,μ)p(μa,b)=CNmμm(1μ)NmΓ(a+b)Γ(a)Γ(b)μa1(1μ)b1μm+a1(1μ)Nm+b1\begin{aligned} p(\mu \mid m, N, a, b) & \propto p(m \mid N, \mu) p(\mu \mid a, b) \\ & =C_N^m \mu^m(1-\mu)^{N-m} \frac{\Gamma(a+b)}{\Gamma(a) \Gamma(b)} \mu^{a-1}(1-\mu)^{b-1} \\ & \propto \mu^{m+a-1}(1-\mu)^{N-m+b-1}\end{aligned}

      • n 和 m 都是已知

      • 超参数 a 和 b 是先验中时间发生的次数和不发生的次数,a+b就是有效观察次数

      • 根据这个公式可以看出先验对后验的影响

  • 根据 p(μm,l,a,b)=Γ(m+a+l+b)Γ(m+a)Γ(l+b)μm+a1(1μ)l+b1p(\mu \mid m, l, a, b)=\frac{\Gamma(m+a+l+b)}{\Gamma(m+a) \Gamma(l+b)} \mu^{m+a-1}(1-\mu)^{l+b-1} 后验分布也服从 Beta 分布

    • 根据 E[μ]=aa+b\mathbb{E}[\mu]=\frac{a}{a+b}
      得到事件发生的概率期望等于事件发生次数除以总次数

    • 二项分布中 p(x=1D)p(x=1 \mid D) 预测的分布就是 E[μD]\mathrm{E}[\mu \mid D]

      • p(x=1D)=E[μD]=m+aN+a+b=m+am+a+l+bp(x=1 \mid D)=\mathrm{E}[\mu \mid D]=\frac{m+a}{N+a+b}=\frac{m+a}{m+a+l+b}

      • l = N-m,后验中时间不发生的次数

      • 次数增加,m 和 N 值会变大,当趋于无穷时,a 和 b 可以忽略。

        • 试验次数少,受先验影响大,反之相反。

        • 试验次数多到一定程度后,先验几乎没有影响,后验估计和极大似然估计趋于一致。

  • 2-008
    ls-type:: annotation
    hl-page:: 63
    hl-color:: purple
    [[Bayesian Online Learning]] ((654e45e1-d673-4eeb-806f-9334ee4ee3d9))

    • a+b 值越大,u 取值越集中。根据 var[μ]=ab(a+b)2(a+b+1)\operatorname{var}[\mu]=\frac{a b}{(a+b)^2(a+b+1)}
      a和趋于无穷时,u 的方差趋于 0。对应试验次数越多,u 的取值越集中,不确定(方差)越小。

      • 下图是 beta 分布概率密度曲线

image.png

+ [\[\[试验次数和后验分布的关系\]\]](/post/logseq/%E8%AF%95%E9%AA%8C%E6%AC%A1%E6%95%B0%E5%92%8C%E5%90%8E%E9%AA%8C%E5%88%86%E5%B8%83%E7%9A%84%E5%85%B3%E7%B3%BB.html) 随着试验次数的增加(数据集的变大),未知参数的取值越来越集中?

ls-type:: annotation
hl-page:: 63
hl-color:: yellow

  + 随着试验次数的增加,后验分布的不确定性会越来越小?

ls-type:: annotation
hl-page:: 63
hl-color:: yellow

  + 答案是:在一般情况下,理论上的确有这样的趋势,但对于某些特定的数据集则不一定。

ls-type:: annotation
hl-page:: 63
hl-color:: yellow


Building a Second Brain

CODE

  • Capture

    • 记录哪些信息:不要被动和随意的去接受信息,建立自己关注的领域。在关注领域提出最多 12 个带解决的问题或疑惑。
  • Organize

  • Distill

  • Express

    • Intermediate Packet

CBOW

全称 :-> continuous bag-of-word
输入词经过线性变化后,词向量进行累加求和作为隐藏层。

经过softmax得到概率分布向量,进而计算概率的交叉熵实现参数的训练。


CTR

指标

  • CVR 转化率

    • SSB: Sample Selection Bias,训练时集合是点击的样本,正样本为转换的,负样本为未转化。预测时空间为全体样本,存在 bias

Beam Search

[[NLP]] 中比较常用

参数 B 控制 beam width

翻译任务中:第一次选取概率最高的 B 个词语。第二次在这 B 个词语上进行扩展下一个单词,然后选取概率最高的 B 个词组,以此类推,直到结束。B=1 时相当于贪心。

image.png

[[Seq2Seq]] 中应用在 decode 部分

[[Transformer]] 解决实际预测环节如何构造一个理想输出

[[Ref]]


Bernoulli Distribution

f(x)=px(1p)1xf(x)=p^x(1-p)^{1-x}

E(x)=xf(x)=0(1p)+p=pE(x)=xf(x)= 0 * (1-p) + p= p
D(x)=p(1p)D(x)=p(1-p)
抛一次硬币

求解唯一的参数 μ\mupp

  • 根据似然函数

    • p(Dμ)=n=1Np(xnμ)=n=1Nμxn(1μ)1xnp(\mathcal{D} \mid \mu)=\prod_{n=1}^N p\left(x_n \mid \mu\right)=\prod_{n=1}^N \mu^{x_n}(1-\mu)^{1-x_n}
  • 求对数似然函数

    • lnp(Dμ)=n=1Nlnp(xnμ)=n=1N{xnlnμ+(1xn)ln(1μ)}\ln p(\mathcal{D} \mid \mu)=\sum_{n=1}^N \ln p\left(x_n \mid \mu\right)=\sum_{n=1}^N\left\{x_n \ln \mu+\left(1-x_n\right) \ln (1-\mu)\right\}
  • 对对数似然求导,令结果等于 0

    • μML=1Nn=1Nxn\mu_{\mathrm{ML}}=\frac{1}{N} \sum_{n=1}^N x_n

样本的均值是伯努利分布的[[充分统计量]] sufficient statistic
ls-type:: annotation
hl-page:: 89
hl-color:: yellow
(分布的参数 μ\mu 可以由该统计量估计得到)


Ch2 Probaility Distributions

[[伯努利分布]] 一次二值实验

[[多项分布]] k 种取值

[[高斯分布]]

  • [[参数估计]]

    • [[极大似然估计]]
  • [[高斯共轭先验]]

    • 均值共轭先验是高斯分布

    • 方差

      • 一维高斯方差的共轭先验是逆Gamma分布

      • 多维高斯协方差阵的共轭先验是逆Wishart分布

  • 无信息先验及其他

[[指数族分布]] 一定可以找到共轭先验,且共轭先验形式确定。

  • 非参模型:不能由有限个参数决定,对新 x 计算可以用之前全部的训练数据

    • 参数控制模型复杂度

    • [[K-Means Clustering]] 中 K 代表中心点数量

根据数据集 X 建模 P(x)

  • [[密度估计]] density estimation

    • [[独立同分布]]i.i.d independent and identically distributed
  • 参数化

  • 非参数化


Chrome

[[快捷键]]

    • 删除地址栏联想内容:按向下箭头键以突出显示相应内容,然后按 Shift + fn + Delete 键

黑暗模式控制

  • 关闭 defaults write com.google.Chrome NSRequiresAquaSystemAppearance -bool YES

  • 打开 defaults write com.google.Chrome NSRequiresAquaSystemAppearance -bool NO

插件


Convolutional neural networks on graphs with fast localized spectral filtering

优点

  • 卷积核只有 K 个参数,K 远小于 n

  • 不需要做特征分解,直接用拉普拉斯矩阵 L 进行变换,但是复杂度还是 n3

  • 卷积核具有很好的 局部性

    • K 是卷积核的 receptive field 感受野

    • 每次卷积将中心顶点 k-hop neighbor 的 feature 进行加权求和

    • 例子

  + K=2 时需要二阶 [\[\[Laplacian matrix\]\]](/post/logseq/Laplacian%20matrix.html)


DART

主要思想 :-> 每次新加的树要拟合并不是之前全部树 ensemble 后的负梯度,而是随机抽取一些树 ensmeble 后的负梯度。

  • 解决 GBDT over-specialization 问题

    • 问题现象 :-> 前面迭代树对预测值的贡献比较大,后面的树会集中预测一小部分样本的偏差
    • 常规方法 :-> Shrinkage
      算法流程图
      image.png
  • S1 :-> 训练数据集

  • T1 :-> 使用 S1 数据训练得到决策树

  • 针对决策树 2 到 N #card #incremental

    • 从 M 中随机抽取决策树集合 D,M^\hat{M} 是 M 和 D 的差集

    • 利用 M^\hat{M} 计算样本负梯度,得到数据集 St

    • 利用 St 训练 Tt

    • 调整 Tt 的权重

      • 负梯度只有 M^\hat{M} 树得到,实际上这个少的负梯度由 Tt 和 D 中的树共同拟合,所以需要对 T_t 缩小 D+1 倍
    • 调整 D 中其他树的权重

[[lightgbm 使用记录]] Early stopping is not available in dart mode


DCN

在 Wide & Deep 基础上,对 Wide 部分进行改进。LR 无法进行特征交叉,FM 受限于性能一般只去做二阶交叉,Cross 可以实现高阶交叉。DCN 和 DNN 相比,相同效果情况下可以减少参数量。

Cross 网络只能处理定长的输入,[[ETA]] v4 中无法使用……

特征处理和常规的模型一样,Sparse feature 经过 embedding 处理,然后和 Dense feature concat 在一起。由于 Cross network 每一层的大小都和输入向量大小相等,如果 Sparse feature 不处理,输入维度会很大,然后参数量会增加。

Cross 和 Deep 的输出结果 concat 后过一个 LR 直接输出。

Cross Network

  • 每一层都是由 x0x_0 和前一层的输出 xlx_l 交叉学习残叉。

  • ResNet 的引入可以将网络做的更深。

  • 特点:有限高阶、自动叉乘、参数共享

  • xl+1=x0xlTwl+bl+xl=f(xl,wl,bl)+xl\mathbf{x}_{l+1}=\mathbf{x}_{0} \mathbf{x}_{l}^{T} \mathbf{w}_{l}+\mathbf{b}_{l}+\mathbf{x}_{l}=f\left(\mathbf{x}_{l}, \mathbf{w}_{l}, \mathbf{b}_{l}\right)+\mathbf{x}_{l} #card

    • 图中可以看到随着层数的增加,参数 w 会线性增加。

image.png

Deep NetWork

  • Cross Network 中的参数量太少,不能学习高维的非线性特征。

Analysis

  • Cross 的设计最后包含了每个特征的从 1 阶到高阶的特征组合。与 FM 不同每个特征组合的参数部分共享,所以能降低参数量,比 FM 有更好的泛化性和鲁棒性。比如 FM 可以解决 xi 和 xj 没有同时出现过的情况,但是 Cross 能处理 xi 和 xj 都没有出现过的情况 …… #card
    image.png

DIEN

亮点

    1. 引入辅助 Loss:利用 GRU 的 hidden state 与下一个点击的商品做一个
    1. 一般模型把用户行为直接当成兴趣,dien 认为用户兴趣是隐藏在行为中,需要去挖掘

image.png

  • feature 分成四类:User Profile, User Behavior, Ad and Context

  • [[interest extractor layer]] 作用 :-> 兴趣抽取层,用 GRU 抽取序列信息

  • [[interest evolving layer]] 作用 :-> 兴趣进化层,将Target Attention引入GRU,过滤掉与待排序的广告不相关的信息。

  • [[AUGRU]] 计算方法 #card

    • 这里是先用序列中Item的隐状态和待排序的广告Embedding计算一个Attention标量,再将该标量乘以更新门控向量。

    • 最终隐藏状态和候选状态,以及每一个维度的重要性,由当前Item隐状态,待排序广告,前一Item隐状态,当前Item原特征(后两者用于计算更新门)共同决定。

源码阅读

  • train.py 指定模型

  • model 中包含对模型的实现

  • 数据

    • uid_voc.pkl: 用户名对应的id

    • mid_voc.pkl: item对应的id

    • cat_voc.pkl:category对应的id

    • item-info:item对应的category信息

    • reviews-info:用于进行负采样的数据

    • local_train_splitByUser:训练数据,一行格式为:label、用户名、目标item、 目标item类别、历史item、历史item对应类别。

    • local_test_splitByUser:测试数据,格式同训练数据

  • 网络设置

    • embeeding 18

    • hidden size 18*2

    • attention_size 18*2

    • fcn: 200-80-2

    • dice

    • prelu

  • 需要分析代码:

    • aux 网络

    • gru 改造

    • din_fcn_attention

[[Ref]]


DIN

[[Attachments]]

Embedding & MLP 模型

  • embedding layer (for learning the dense representation of sparse features)

  • MLP (for learning the combination relations of features automatically).

Feature Representation

  • 所使用的特征如下图,没有使用组合特征,所以避免了特征工程。

  • multi-hot 经过 embedding 层组成一个 embedding list,然后通过 pooling 层(sum pooling or average pooling)变成固定长度的向量。

损失函数:$$L=-\frac{1}{N} \sum_{(x, y) \in S}(y \log p(x)+(1-y) \log (1-p(x)))$$

Deep Interest NetWork

  • base model 中所有的历史行为最后通过 sum pooling 得到固定长度的向量,没有考虑 和候选商品的关系 。固定长度的向量表达能力有限。

  • 用户特征的特点:diverse and locally activated

  • User Behaviors 通过 SUM Pooling 转化成为定长的向量。

  • 考虑到用户兴趣不是 严格时间关系 ,所以 User Behaviors 没有考虑序列关系。

  • 通过 local acvtivation unit 学习用户历史行为和候选广告的权重 [[target attention]]

    • vU(A)=f(vA,e1,e2,,eH)=j=1Ha(ej,vA)ej=j=1Hwjejv_{U}(A)=f\left(\boldsymbol{v}_{A}, \boldsymbol{e}_{1}, \boldsymbol{e}_{2}, \ldots, \boldsymbol{e}_{H}\right)=\sum_{j=1}^{H} a\left(\boldsymbol{e}_{j}, \boldsymbol{v}_{A}\right) e_{j}=\sum_{j=1}^{H} w_{j} \boldsymbol{e}_{j}

      • 历史行为和候选广告做叉乘反映两者的 相关性 ,早期版本使用 embedding 差。
      • 和传统的 attention 相比,没有使用 softmax 去进行归一化,用来表达用户信息的强烈程度? #card
        • 赋予和候选广告相关的历史兴趣更高的weight
  • 商品特征包括 goods_id shop_id cate_id(分类)

  • 网络结构 #card
    image.png
    [[mini-batch aware regularization]]

[[data adaptive activation function]]

Attention 权重可视化 #card
image.png

[[Group AUC]]

问题

  • DIN 模型提出的动机是什么?是否适合自己公司当前的场景和数据特点?#card

  • DIN 模型的模型结构是什么?具体实现起来有那些工程上的难点?#card

    • 用户对应行为序列的获取
  • DIN 模型强调的注意力机制是什么?#card

    • 候选商品和用户行为序列的关系
  • [[为什么在推荐系统中引入注意力机制能够有效果上的提升?]]#card

    • 动态权重分配,替代平均池化。长短期分配

    • 引入行为序列表达用户兴趣

    • 可解释性与鲁棒性

  • DIN 模型将用户和商品进行了 Embedding,在实际使用中,应该如何实现 Embedding 过程?#card

  • 与DIN类似的模型有哪些,是否适合当前的使用场景。#card
    [[Ref]]

  • 详解 Deep Interest Network: 为阿里创造更多广告收入 - 知乎

  • 推荐系统中的注意力机制——阿里深度兴趣网络(DIN) - 知乎


DeepFM

特征处理

  • 连续特征不做 embedding,进入二阶交

为什么 Deep 和 FM 共享一份 embedding #card

  • 内存增大,过多参数可能导致过拟合

  • 如果特征不同,同一个 token 可能训练量不一样

[[Wide&Deep]] 对比 #card

  • wide 部分引入 FM 自动特征组合能力,避免原来浅层部分人工特征工程

  • fm 和 deep 共享原始输入特征,保证模型特征的准确与一致。

FM Layer 的直接与输出单元连接,DNN 部分,加强浅层网络部分特征组合的能力。

DNN与DeepFM之间的区别? #card

  • DNN是DeepFM中的一个部分,DeepFM多一次特征,多一个FM层的二次交叉特征

[[Ref]]


DeepWalk

DeepWalk: Online Learning of Social Representations


Dynamic Pricing

定价:预估 + 决策

  • 去偏(uplift、因果、单调性、parameterized model)表征(seq/时空/GNN)预估准确性(uncertainty、拒绝器、calibration)多目标、长期价值

  • 决策:流控(系统、时效、大规模)、calibration、constrained RL

image.png


EGES

[[向量化召回统一建模框架]]

  • 如何定义正样本 #card
    • 之前介绍的Item2Vec以及Airbnb I2I召回都认为只有被同一个用户在同一个Session内交互过的两个物料才有相似性,才可能成为正样本。EGES认为这个限制太狭隘了。比如一个用户点击过物料A和物料B,另一个用户点击过物料B和物料C。Item2Vec认为只有AB和BC才存在相似性,但是AC难道就不相似了吗?EGES应该把这种跨用户、跨Session的相似性考虑进去,这样能够提高模型的扩展性,也能够给那些冷门物料更多的训练机会。

image.png

  • 如何 embedding #card
    • 推荐系统与NLP的区别就在于,通常NLP中除了单词本身,就没有多少其他特征可利用了;但是在推荐系统中,除了ID,每个物料还有丰富的属性信息(也称为Side Information)​,比如商品的类别、品牌、商铺等。这些信息在照搬Word2Vec的Item2Vec中没有被利用上,太可惜了。另外,加入这些额外的物料属性当特征,还有利于新物料的冷启。对于ID从未在训练集中出现过的新物料,Item2Vec无法给出其Embedding;但是新物料的属性大多在训练集中出现过,并且它们的Embedding已经被训练好了,EGES可以拿这些属性的Embedding合成新物料的Embedding,解一时之需。

image.png

image.png


Effie

[[Markdown]] 写作软件

简洁而不简陋

  • 简单、简洁是通过复杂逻辑设计实现

  • 极简绝不是直截了当地做减法,而应当是在幕后完成更多的设计和开发工作,让前台「暴露」给使用者的部分在完成功能使命的前提下尽最大可能地精简。

文件不用命名就能保存

文章和大纲混排

  • 大纲可以变成思维导图

功能描述

  • 「不觉已春深,物我两相忘。」

  • 「桐花诗八韵,思绪一何深。」

  • 「无穷如天地,不竭如江海。」

  • 「著叶满枝翠羽盖,开花无数黄金钱。」


Evergreen notes

#Workflow

如何选择处理 Inbox Triage strategies for maintaining inboxes (e.g. Inbox Zero) are often too brittle

  • [[GTD]] 中经常强调 [[Inbox Zero]]

  • 至少做到内容增长率低于处理率

  • 推迟处理不重要的任务

  • "Zero-inbox appears to be his principle behind 5.1 and 5.3. The reading inbox is a triage area. The work is deciding whether to:

throw away

read seriously (ie, take notes)

read shallowly (add to references)

added to another list (eg, recipes)"


Eugene Yan

Amazon 的工程师,偏向机器学习系统实现

eugeneyan.com

ApplyingML - Papers, Guides, and Interviews with ML practitioners 机器学习资料整理

Effective Writing via Why, What, How (applyingml.com) [[说话练习]] 如何有效进行文档写作

Why and How to Read Papers (applyingml.com) [[how to read a paper]]

  • 第一遍,读 problem statement, methods, and results

  • 第二遍,整理文章的重点

  • 第三遍,针对同一个问题,汇总多篇文章处理的方法,形成自己的结论

  • 写文章发表自己的观点

[[Eugene Yan@imposter syndrome]]


FTRL

FTL Follow The Leader 在线学习的一种思路 #card

  • 为了减少单个样本的随机扰动,每次找到让之前所有损失函数之和最小的参数。
  • w=argminwi=1tfi(w)w=\operatorname{argmin}_{w} \sum_{i=1}^{t} f_{i}(w)
    FTRL 带正则项的 FTL 算法 #card
  • w=argminwi=1tfi(w)+R(w)w=\operatorname{argmin}_{w} \sum_{i=1}^{t} f_{i}(w)+R(w)
    通过代理损失函数求解

[[稀疏性]] 模型稀疏好处

  • 减少预测内存和复杂度,大量参数是零

  • 利用 L1 正则不仅能获得稀疏,而且能降低模型过拟合带来的风险

  • 稀疏模型,相对来说可解释性更好。

为什么 SGD 不一定能保证模型的稀疏性?#card

  • 不同于 Batch,Online 中每次 的更新并不是沿着全局梯度进行下降,而是沿着某个样本的产生的梯度方向进行下降,整个寻优过程变得像是一个“随机” 查找的过程(SGD 中 Stochastic 的来历),这样 Online 最优化求解即使采用 L1 正则化的方式, 也很难产生稀疏解。

数据集规模大,每一次计算全局梯度的代价变得过高,完成训练时间会变得很长。

在线学习:每次处理一个样本,处理过的样本会被丢弃。

特点 #card

  • 每个特征一个学习率([[Adam]]中也实现了)

  • 收敛速度快

  • L1 正则引入稀疏性,L2 正则引入平滑 [[弹性网络回归]]

How they choose to center the additional strong convexity used to guarantee low regret: RDA centers this regularization at the origin, while FOBOS centers it at the current feasible point. 结合[[FOBOS]]高精度以及 RDA 较好的稀疏性

  • How they handle an arbitrary non-smooth regularization function Ψ\Psi. This includes the mechanism of projection onto a feasible set and how L1L_1 regularization is handled.

Ref


Farnam Street

#Business

Farnam Street 优化读者的忠诚度,而不是访问量 | 湾区日报

[[Charlie Munger]] The Munger Operating System: A Life That Really Works

简介

  • Farnam Street 是关于阅读、个人成长、探索人生智慧的高质量的博客。Shane Parrish 于 09 年读 MBA 时开始做;现在是一家公司,靠广告、付费会员、开课、办讲座赚钱。

  • 他是巴菲特与 [[Charlie Munger]] 的铁杆粉丝。

  • 最早的博客域名是 68131.blogger.com,68131 是巴菲特的公司 Berkshire Hathaway 所在地的邮编;

  • 现在博客名字 Farnam Street 是 Berkshire Hathaway 所在的街道的名字。

  • 博客每月 page view 过百万,邮件订阅用户数 14.5 万。

TODO Mental Models: The Best Way to Make Intelligent Decisions (109 Models Explained)

The Great Mental Models


Feature Engineering

模型用来逼近 特征上限
[[特征设计原则四象限]]
[[特征设计]]

[[特征选择]]

  • 特征值之间的方差小,代表其 识别能力较弱

[[数据清洗]] 对异常数据进行清洗,最常见的异常有空值异常(缺省值处理)、数值溢出(数值异常处理)。

[[特征变换]]

使用方式

特征重要性分析和[[特征选择]]

特征抽取

  • 线性判别分析[[Fisher]]

  • [[PCA]]

  • [[自编码器]]

[[深度学习不需要特征工程?]]

Explicit Semantic Cross Feature Learning via Pre-trained Graph Neural Networks for CTR Prediction

  • 使用 GNN 构造 (用户特征,物料特征) 的交叉特征

  • 预估输入特征的 xtr

Ref

  • @探讨特征工程的方法论

    • [[类似 automl 的特征字典]]

    • 基于业务逻辑去做特征工程

    • 特征重要性表的特征工程思路

      • 利用 xgb/lgb 输出特征重要性,对重要性高的特征交叉

      • 通过 embedding 对物品进行泛化

  • 工业级推荐系统中的特征工程 - 知乎 (zhihu.com)

    • 误区

      • 深度学习不需要特征工程?

        • 模型可以学习 row-based 的特征变换,很难学习 column-based 特征变换(counting,tf-idf)
      • [[AutoML]] 工具取代特征工程?

      • 特征工程没有技术含量?

    • 搜广推场景下的特征工程

      • high-cardinality 属性表示位特征时的挑战

      • 对特征进行统计,分桶,然后再交叉


Feature Engineering/Time Series Feature

时间戳衍生

  • 时间特征:年月日、节假日、星期几、上午中午下午凌晨

  • 布尔特征:是否周末

  • 时间差特征

  • time encoding

    • 周期特征循环编码

      • 好处:相邻两天的 encoding 结果相似

      • [[sklearn]] functiontransformer

      • [[sklearn]] functiontransformer

1
2
3
4
def sin_transformer(period):
return FunctionTransformer(lambda x: np.sin(x / period * 2 * np.pi))
def cos_transformer(period):
return FunctionTransformer(lambda x: np.cos(x / period * 2 * np.pi))

时序值衍生

  • 寻找时间序列的趋势因素,季节性周期性因素

  • 滞后值 [[lag feature]]

    • 取过去 X 个时间步作为 feature

      • lag 之间的同比环比n阶差分
    • 昨天、上周同一天等数据高度相关

  • 滑动窗口统计 Rolling Window Statistics

    • 先前时间观察值的统计信息做为特征

    • 前 7 天数据的平均数、中位数、标准差、最大值、最小值

    • 过去数据被聚合成标量,也可以做比例、差值之类的运算

    • 滞后值 [[lag feature]]
      的滑动窗口为 1

  • 扩展窗口统计 Expanding Window Statistics

    • 统计整个序列的全部数据

序列属性衍生

  • 连续变量衍生

    • 其他连续变量特征

    • 股票收盘佳之外还成交量、开盘价等

  • 类别变量 Encoding

    • 类别少时可以用 one-hot encoding

    • 类别如果与顺序无关,放到树模型中会被当成是连续型处理

    • 与 y 做特征交互

      • 预测销量时,统计某个产品类别下的销量均值、标准差等

      • [[目标编码]]

Ref


GAT

两种方式

  • Global graph attention

    • 每个顶点 i 都对图上任意顶点进行 attention 计算

    • 相当于不考虑图结构

  • Mask graph attention

    • 只在相邻顶点上计算

GAL graph attentional layer

  • attention 系数 ei,j=a(Whi,Whj)e_{i, j}=a\left(\mathbf{W} \overrightarrow{\mathbf{h}}_{i}, \mathbf{W} \overrightarrow{\mathbf{h}}_{j}\right)

    • 共享参数 W 相当于对顶点特征进行增维

    • 站在顶点 i 的角度看顶点 j 对它的重要性

  • masked attention 机制,只计算顶点 i 和其他相邻点的系数

  • αi,j=softmaxj(ei,j)=exp(LeakyReLU(a[Whi,Whj]))kNiexp(LeakyReLU(a[Whi,Whk])))\alpha_{i, j}=\operatorname{softmax}_{j}\left(e_{i, j}\right)=\frac{\exp \left(\operatorname{LeakyReLU}\left(\overrightarrow{\mathbf{a}} \cdot\left[\mathbf{W} \overrightarrow{\mathbf{h}}_{i}, \mathbf{W} \overrightarrow{\mathbf{h}}_{j}\right]\right)\right)}{\left.\sum_{k \in \mathcal{N}_{i}} \exp \left(\operatorname{LeakyReLU}\left(\overrightarrow{\mathbf{a}} \cdot\left[\mathbf{W} \overrightarrow{\mathbf{h}}_{i}, \mathbf{W} \overrightarrow{\mathbf{h}}_{k}\right]\right)\right)\right)}

  • 每个顶点最终输出 hi=σ(jNiαi,jWhj)\overrightarrow{\mathbf{h}}_{i}^{\prime}=\sigma\left(\sum_{j \in \mathcal{N}_{i}} \alpha_{i, j} \mathbf{W} \overrightarrow{\mathbf{h}}_{j}\right)

  • multi-head attention

    • hi(K)=k=1Kσ(jNiαijkWkhj)h_{i}^{\prime}(K)=\|_{k=1}^{K} \sigma\left(\sum_{j \in \mathcal{N}_{i}} \alpha_{i j}^{k} W^{k} h_{j}\right)

[[GCN]] 联系

  • 将临接点的特征聚合到中心顶点上,利用 graph 的 local stationary 学习新的顶点特征表达。

  • GCN 利用 [[Laplacian matrix]],GAT 利用 attention 系数

如何适用于 inductive 任务

  • 学习参数 W 和 a,与顶点特征相关,与图结构无关

  • GCN 是一种全图计算方法,一次计算就更新全图的节点特征

Graph Attention Network的本质是什么? - 知乎 (zhihu.com) [[2023/03/03]]

  • Graph Convolution 的核心思想是利用边的信息对节点进行聚合,从而生成新的节点表示

    • CNN 是利用节点信息生成新的节点表示?

    • 如何让模型学习到相邻节点的权值?

      • 利用相似度

        • 利用 cost 衡量两个节点的相似度 AGNN

        • alearn (i,j)=exp(β×cos(Wxi,Wxj))Σk neigh (i)exp(β×cos(Wxi,Wxj))a_{\text {learn }}(i, j)=\frac{\exp \left(\beta \times \cos \left(W x_i, W x_j\right)\right)}{\Sigma_{k \in \text { neigh }(i)} \exp \left(\beta \times \cos \left(W x_i, W x_j\right)\right)}

      • 完全利用学习 GAT

        • alearn (i,j)=exp(LeakyReLU(w[Wxi,Wxj]))Σkneigh(i)exp(LeakyReLU(w[Wxi,Wxk]))a_{\text {learn }}(i, j)=\frac{\exp \left(\operatorname{LeakyReLU}\left(w\left[W x_i, W x_j\right]\right)\right)}{\Sigma_{k \in n e i g h(i)} \exp \left(\operatorname{LeakyReLU}\left(w\left[W x_i, W x_k\right]\right)\right)}
    • GNN 让模型关注到 Garph 中最重要的节点/节点中最重要的信息从而提高信噪比。

      • GAT 利用节点之间的关系,区分联系的层级,增强任务中需要的有效信息。
  • GAT 在同质图上学不到任何有用的 attention 值

    • Cora 机器学论文,7类

    • citeseer 科学论文,6类

    • 非同质 PPI

      • 节点蛋白质,边表示蛋白质之间的相互作用
    • 退化成 GCN

Ref


GBDT

GBDT 核心思想

  • 累加全部决策树的结果作为最终结果

Gradient Boosting Machine 基于梯度提升算法的学习器

[[Gradient Descend]] 到 Gradient Boosting

  • Gradient Descend

    • 迭代公式:$${\theta ^t = \theta ^{t-1} + \theta _{t}}$$

    • 负梯度方向更新参数:$${\theta _t = - \alpha _t g_t}$$

    • 最终参数等于每次迭代的增量的累加和:$${\theta = \sum_{t=0}^T \theta _t}$$

  • Gradient Boosting

    • 迭代公式:$${f^t(x) =f^{t-1}(x) + f_t(x)}$$

    • 拟合负梯度:$${f_t(x)= - \alpha _t g_t(x)}$$

    • 最终函数等于每次迭代的增量的累加和:$${F(x) = \sum_{t=0}^T f_t(x)}$$

加法模型

  • F(x;w)=m=1Mαmhm(x;wm)=m=1Mft(x;wt){F(x;w)=\sum^{M}_{m=1} \alpha_m h_m(x;w_m) = \sum^{M}_{m=1}f_t(x;w_t)}

  • 其中,x 为输入样本,h 为分类回归树,w 是分类回归树的参数,α{\alpha} 是每棵树的权重。

  • GBDT 算法可以看成是由 k 棵树组成的加法模型

    • y^i=k=1Kfk(xi),fkF\hat{y}_i=\sum_{k=1}^K f_k\left(x_i\right), f_k \in F

流程

  • 通过最小化损失函数求解最优模型:F=argminFi=1NL(yi,F(xi)){F^* = argmin_F \sum^N_{i=1}L(y_i, F(x_i))}

  • 输入: (xi,yi),T,L{(x_i,y_i),T,L}

    1. 初始化:f0(x){f_0(x)}
      1. 求解损失函数最小
      1. 随机初始化
      1. 训练样本的充分统计量
    1. 对于 t=1toT{t = 1 to T}
    • 2.1 计算负梯度(伪残差): yi~=[L(yi,F(xi))F(x)]F(x)=Fm1(x),i=1,2,...,N{ \tilde{y_i} = -[\frac{\partial L(y_i, F(x_i))}{\partial F(x)}]_{F(x)=F_{m-1}(x)} ,i=1,2,...,N}

    • 2.2 根据 yi~{\tilde{y_i}} 学习第 m 棵树: w=argminwi=1N(yi~ht(xi;w))2{w^*=argmin_{w} \sum_{i=1}^N(\tilde{y_i} - h_t(x_i;w))^2}

      • 最小化问题中,如果有解析解,直接带入。否则,利用泰勒二阶展开,Newton Step 得到近似解。
    • 2.3 line searcher 找步长:ρ=argminρi=1NL(yi,Ft1(xi)+ρht(xi;w)){\rho^* = argmin_\rho \sum_{i=1}^{N}L(y_i, F_{t-1}(x_i)+\rho h_t(x_i;w^*))}

    • 2.4 令 ft=ρht(x;w){f_t=\rho^*h_t(x;w*)},更新模型:Ft=Ft1+ft{F_t=F_{t-1}+f_t}

    1. 输出 FT{F_T}

[[GBDT/Loss]]

[[GBDT/Question]]

Ref

  • [[gbdt 时间序列]]


GBDT/Loss

流程

[[Gaussian Distribution]]

  • 损失函数 (yif(xi))2{(y_i - f(x_i))^2}

  • 负梯度 yif(xi){y_i - f(x_i)}

  • 初始化 yim{\frac {\sum y_i}{m}}

  • 叶节点估计

[[AdaBoost]]

  • 损失函数 e(2y1)f(x),y{1,0}{e^{-(2y-1)f(x)}, y\in \{1,0\}}

    • 也可以是 eyf(x),y{1,1}{e^{-yf(x)}, y\in \{1,-1\}}
  • 负梯度 (2y1)e(2y1)f(x){(2y-1)e^{-(2y-1)f(x)}}

  • g=(2y1)e(2y1)f(x){g=-(2y-1)e^{-(2y-1)f(x)}}, h=(2y1)2e(2y1)f(x)=e(2y1)f(x){h=(2y-1)^2e^{-(2y-1)f(x)}=e^{-(2y-1)f(x)}}

  • 初始化 F0=12logP(y=1x)P(y=1x){F_0=\frac{1}{2} \log \frac{\sum P(y=1|x)}{\sum P(y=-1|x)}}

  • 叶节点估计 gh=(2y1)e(2y1)f(x)e(2y1)f(x)=2y1{-\frac{g}{h}=\frac{(2y-1)e^{-(2y-1)f(x)}}{e^{-(2y-1)f(x)}}=2y-1}

[[Bernoulli Distribution]]

  • gbdt 代码中 y{0,1}{y\in \{0,1\}}

    • logistics Regression 与对数损失函数转化

    • y=12,y{0,1}{y^*=\frac{1}{2}, y^*\in \{0,1\}}

    • eyF(x)+eyF(x)=eF(x)+eF(x),y{1,1}{e^{yF(x)}+e^{-yF(x)}=e^{F(x)}+e^{-F(x)}, y\in \{-1,1\}}

    • ylogp(x)+(1y)log(1p(x))=1+y2logeF(x)eF(x)+eF(x)+1y2logeF(x)eF(x)+eF(x){y^*\log p(x)+(1-y^*) \log (1-p(x))=\frac{1+y}{2}\log \frac{e^{F(x)}}{e^{F(x)}+e^{-F(x)}}+\frac{1-y}{2}\log \frac{e^{-F(x)}}{e^{F(x)}+e^{-F(x)}}}

    • =1+y2logeF(x)+1y2logeF(x)+1+y2log1eF(x)+eF(x)+1y2log1eF(x)+eF(x)=yF(x)+log1eF(x)+eF(x){=\frac{1+y}{2}\log e^{F(x)}+\frac{1-y}{2}\log e^{-F(x)} +\frac{1+y}{2}\log \frac{1}{e^{F(x)}+e^{-F(x)}}+\frac{1-y}{2}\log \frac{1}{e^{F(x)}+e^{-F(x)}}=yF(x)+\log \frac{1}{e^{F(x)}+e^{-F(x)}}}

    • =logeyF(x)eyF(x)+eyF(x)=log(1+e2yF(x)){=\log \frac{e^{yF(x)}}{e^{yF(x)}+e^{-yF(x)}}=\log(1+e^{-2yF(x)})}

  • 对数损失函数 log(1+e2yf(x)),y{1,1},F(x)=12logP(y=1x)P(y=1x){\log(1+e^{-2yf(x)})}, y\in \{-1,1\}, F(x)=\frac{1}{2} \log \frac{P(y=1|x)}{P(y=-1|x)}

  • 负梯度 2y1+e2yf(x){\frac{2y}{1+e^{2yf(x)}}}

  • 初始化 F0=logP(y=1x)P(y=1x){F_0= \log \frac{\sum P(y=1|x)}{\sum P(y=-1|x)}}

  • 叶节点估计 xiRjmyi~xiRjmyi~(2yi~){\frac{\sum_{x_i \in R_{jm}}\tilde{y_i}}{\sum_{x_i \in R_{jm}}|\tilde{y_i}|(2-|\tilde{y_i}|)}}

  • single Newton-Raphson

    • log(1+e2yf(x)){log(1+e^{-2yf(x)})}

    • 一阶导数 g=2yi1+e2yiFm1(x){g=-\frac{2y_i}{1+e^{2y_iF_{m-1}(x)}}}

    • 二阶导数 h=4yi2e2yiFm1(x)(1+e2yiFm1(x))2{h=\frac{4y_i^2e^{2y_iF_{m-1}(x)}}{(1+e^{2y_iF_{m-1}(x)})^2}}

    • θ=gh=yi~yi~(2yi~){\theta = -\frac{g}{h}=\frac{\tilde{y_i}}{|\tilde{y_i}|(2-|\tilde{y_i}|)}}

    • yi~(2yi~)=2yi1+e2yiFm1(x)(22yi1+e2yiFm1(x))=2yi(21+e2yiFm1(x)2yi)(1+e2yiFm1(x))2=4yi+4yie2yiFm1(x)4yi2(1+e2yiFm1(x))2=4yi2e2yiFm1(x)(1+e2yiFm1(x))2{|\tilde{y_i}|(2-|\tilde{y_i}|)=|\frac{2y_i}{1+e^{2y_iF_{m-1}(x)}}|(2-|\frac{2y_i}{1+e^{2y_iF_{m-1}(x)}}|)=\frac{|2y_i|(2|1+e^{2y_iF_{m-1}(x)}|-|2y_i|)}{(1+e^{2y_iF_{m-1}(x)})^2}=\frac{|4y_i+4y_ie^{2y_iF_{m-1}(x)}|-4y_i^2}{(1+e^{2y_iF_{m-1}(x)})^2}=\frac{4y_i^2e^{2y_iF_{m-1}(x)}}{(1+e^{2y_iF_{m-1}(x)})^2}}

[[Poisson Distribution]]

  • 概率密度函数:f(y;μ)=μyy!eμ{f(y;\mu)=\frac{\mu ^y}{y!}e^{-\mu }}

  • 对数似然函数:l(y;μ)=i=1myilogμiμilog(yi!){l(y;\mu) = \sum^{m}_{i=1} y_i\log \mu_i - \mu_i - \log(y_i!)}

  • 损失函数:L(yi,F(xi))=i=1mehW(x)yilog(hW(xi)){L(y_i, F(x_i)) = \sum^{m}_{i=1}e^{h_W(x)} - y_i\log (h_W(x_i))}

  • 负梯度:yi~=[L(yi,F(xi))F(x)]F(x)=Fm1(x)=yieFm1(xi){ \tilde{y_i} = -[\frac{\partial L(y_i, F(x_i))}{\partial F(x)}]_{F(x)=F_{m-1}(x)} = y_i-e^{F_{m-1}(x_i)}}

  • 初始化 log(i=1myim){\log(\frac {\sum^{m}_{i=1} y_i}{m})}

  • 叶节点估计 log(i=1myi~i=1meFm1(xi)){\log(\frac {\sum^{m}_{i=1} \tilde{y_i}}{\sum^{m}_{i=1} e^{F_{m-1}(x_i)}})}

[[Laplace Distribution]] MAE

  • 损失函数 i=1myiF(xi){\sum^{m}_{i=1} |y_i-F(x_i)|}

  • 负梯度 yi~=[L(yi,F(xi))F(x)]F(x)=Fm1(x)=sign(yiF(xi)){ \tilde{y_i} = -[\frac{\partial L(y_i, F(x_i))}{\partial F(x)}]_{F(x)=F_{m-1}(x)} = sign(y_i-F(x_i))}

  • 初始化 median(y){median(y)}

  • 叶节点估计 median(yi~){median(\tilde{y_i})}

MAPE

  • 损失函数 i=1myiF(xi)yi{\sum^{m}_{i=1} \frac{|y_i-F(x_i)|}{y_i}}

  • 负梯度 yi~=[L(yi,F(xi))F(x)]F(x)=Fm1(x)=sign(yiF(xi))yi{ \tilde{y_i} = -[\frac{\partial L(y_i, F(x_i))}{\partial F(x)}]_{F(x)=F_{m-1}(x)} = -\frac{sign(y_i-F(x_i))}{y_i}}

  • 初始化 medianw(y){median_w(y)}

  • 叶节点估计 medianw(yi~){median_w(\tilde{y_i})}

  • 证明:

    • 对损失函数求完偏导之后的结果是

      • L(yi,F(xi))F(x)=yi~<01yi+yi~>=01yi{\frac{\partial L(y_i, F(x_i))}{\partial F(x)}= \sum_{\tilde{y_i}<0} - \frac{1}{y_i} +\sum_{\tilde{y_i}>=0} \frac{1}{y_i}}
    • 叶节点要估计一个值 λ{\lambda},使损失函数最小,即可以转化为

      • L(yi,F(xi)+λ)F(x)=yi~+λ<01yi+yi+λ~01yi=0{\frac{\partial L(y_i, F(x_i)+\lambda)}{\partial F(x)}= \sum_{\tilde{y_i}+\lambda<0} - \frac{1}{y_i} +\sum_{\tilde{y_i+\lambda}\geqslant 0} \frac{1}{y_i}}=0
    • 对残差进行从小到大排序,找到一个 yp~{\tilde{y_p}} 值,满足

      • i=0p1yi12i=0m1yi{\sum_{i=0}^{p} - \frac{1}{y_i} \geqslant \frac{1}{2}\sum_{i=0}^{m} \frac{1}{y_i}}

[[SMAPE]]

  • 解析解不好求,还是直接用 XGB 的二阶泰勒展开方便

  • 损失函数 i=1myiF(xi)yi+F(xi)2{\sum^{m}_{i=1} \frac{|y_i-F(x_i)|}{\frac{y_i + F(x_i)}{2}}}

  • 负梯度 yi~=[L(yi,F(xi))F(x)]F(x)=Fm1(x)=4yisign(yiF(xi))(yi+F(xi))2{\tilde{y_i} = -[\frac{\partial L(y_i, F(x_i))}{\partial F(x)}]_{F(x)=F_{m-1}(x)} = -\frac{ 4 * y_i * sign(y_i - F(x_i))}{(y_i + F(x_i))^2}}

Ref


GBDT/Question

使用 Boosting 解决决策树算法 容易过拟合 的缺点
为什么使用决策树? #card

  • 决策树是基于 if-then 规则的集合,易于理解,可解释性强,预测速度快。

  • 需要更少的特征工程,可以不用做特征标准化,可以很好处理字段缺失的数据,自动组合多个特征。

树模型在Gradient boosting这种集成方式下有哪些独特的优势?

  • 样本权重 :-> 方便地将样本权重整合到训练过程中,不需要过采样的方法来调整样本权重。

    • 另外一种方式是 bagging,比如随机森林?

    • [[Adaboost]]

  • 通过 树的层数 来平衡 表达能力和泛化能力

  • 学习器角度 :-> 数据样本波动(采样)对决策树影响大,不同样本集合生成的决策树基分类器随机性比较大。不稳定学习器更适合作为基分类器。

  • 特征工程 :-> 使用不同类型的数据时,不需要做特征标准化/归一化,对数据缺失不敏感

  • 可解释性 :-> 模型可解释性好,学习模型可以输出特征的相对重要程度

  • 特征交叉 :-> 能够自动做多组特征间的特征交叉,具有很好的非线性
    为什么 GB 中使用的弱分类器不能是线性分类器? #card

  • 线性模型无法拟合的残差,无法使用另外一个线性模型去拟合。

  • 如何有多个线性模型,那么也可以将这些模型的系数相加,形成一个新的线性模型。

为什么高维稀疏特征时,lr 的效果会比 gbdt 好?

  • 训练高维稀疏特征时,模型容易 :-> 依赖某个特征。
    • lr 如何解决 :-> 通过正则项对权重比较大的特征进行惩罚,减轻过拟合。
    • 为什么 GBDT 不容易解决?:-> GBDT 惩罚项主要是树的深度和叶子节点的数量,也许 GBDT 只需要一个节点就能拟合,惩罚项比较小。
      GBDT 中的梯度是什么对什么的梯度?[[石塔西]] #card
  • Loss(y_i, F(x_i)) 对 F(x_i) 求导

m*n数据集,如果用GBDT,那么梯度是几维?m维?n维?m*n维?或者是与树的深度有关?或者与树的叶子节点的个数有关 [[石塔西]] #card

  • 每一轮对 m 个样本求梯度,所以梯度是 m 维

GBDT/XGBoost 解决过拟合的思路?

  • 正则化角度 #card

    • 在目标函数中添加正则化。

      • 叶子节点个数 + 叶子节点权重的 L2 正则化
    • CART 正则化剪枝

    • 控制树的深度和最小样本的数量

  • 采样角度 #card

    • 列采样,训练只使用部分特征

    • 子采样,每轮计算使用部分样本

  • early stopping

  • shrinkage :-> 调小学习率减少每棵树的影响,增加树的数量,为后面的训练留出更多的空间
    GBDT与[[随机森林]]模型相比有什么优缺点?

  • 相同点:最终的结果 由多棵树一起 决定

    • RF 决定方式 :-> 多数表决(取平均)
    • GBDT 决定方式 :-> 加权融合
  • 不同点

    • [[集成学习]] :-> GBDT 属于 boosting,随机森林属于 bagging
      • 方差与偏差角度 :-> GBDT 不断降低模型的偏差,RF 不断降低模型的方差
    • 训练样本 :-> RF 每次迭代有放回采样,GBDT 使用全部样本
    • 并行性 :-> RF 可以并行生成,GBDT 只能顺序生成
    • 数据敏感性 :-> RF 对异常值不敏感,GBDT 对异常值比较敏感
    • 泛化能力 :-> RF 不易过拟合,GBDT 容易过拟合

GCN

核心思想

  • GCN 本质用来提取拓扑图的空间特征

  • 利用『边的信息』对『节点信息』进行『聚合』从而生成新的『节点表示』。

Non Euclidean Structure 拓扑图

为什么需要图卷积神经网络?

  • CNN 研究对象是具备 Euclidean Domains 的数据,特征是他们具有规则的空间结构,可以用一维或二维矩阵来表示。

  • CNN 的平移不变性在非矩阵结构数据不适用

    • 平移不变性

      • 输入怎么变形输出都不变
    • 平移可变性

      • 目标检测,物体从图片左侧移到右侧,坐标发生改变。

      • R-FCN,网络变深平移可变性变差。物体在输入上的小偏移,经过多层 pooling 后在小的 feature map 上感知不到。

将 [[CNN]] 扩展到图上,如何在图上实现卷积的各个特性?

  • 权重共享

  • 局部性

    • 第一代 GCN 没有 local 性质,卷积核的运算矩阵在所有位置上都有非 0 元素

    • 第二代的运算矩阵在和当前顶点邻接的位置都是非 0 元素

  • 多尺度

为什么需要 [[Laplacian matrix]]

  • 对称矩阵,可以进行特征分解

  • 拉普拉斯矩阵只在中心顶点和一阶相连的顶点上有非 0 元素

  • 由于卷积在傅里叶域的计算相对简单,为了在graph上做傅里叶变换,需要找到graph的连续的正交基对应于傅里叶变换的基,因此要使用拉普拉斯矩阵的特征向量。

如何把卷积推广到 Graph 上

  • (fh)G=U(h^(λ1)h^(λn))UTf(f * h)_{G}=U\left(\begin{array}{lll}\hat{h}\left(\lambda_{1}\right) & & \\ & \ddots & \\ & & \hat{h}\left(\lambda_{n}\right)\end{array}\right) U^{T} f
  • [[Laplacian matrix]]分解 可以写成 L=UΛUTL=U \Lambda U^{T}

[[Spectral Networks and Deep Locally Connected Networks on Graphs]] 图上扩展卷积

  • 基于空域的卷积构建 Spatial Construction

  • 基于谱域的卷积构建 Spectral Construction

    • 第一代 GCN

      • youtput =σ(Ugθ(Λ)UTx)y_{\text {output }}=\sigma\left(U g_{\theta}(\Lambda) U^{T} x\right)

        • gθ(Λ)=(θ1θn)g_{\theta}(\Lambda)=\left(\begin{array}{lll}\theta_{1} & & \\ & \ddots & \\ & & \theta_{n}\end{array}\right)
    • Spectral graph theory 借助于图的拉普拉斯矩阵的特征值和特征向量来研究图的性质

[[Convolutional neural networks on graphs with fast localized spectral filtering]]

  • 第二代 GCN

  • h^(λi)\hat{h}\left(\lambda_{i}\right) 设计成 j=0Kαjλlj\sum_{j=0}^{K} \alpha_{j} \lambda_{l}^{j}

  • youtput =σ(Ugθ(Λ)UTx)y_{\text {output }}=\sigma\left(U g_{\theta}(\Lambda) U^{T} x\right)

    • gθ(Λ)=(j=0Kαjλ1jj=0Kαjλnj)=j=0KαjΛjg_{\theta}(\Lambda)=\left(\begin{array}{llll}\sum_{j=0}^{K} \alpha_{j} \lambda_{1}^{j} & & \\ & \ddots & \\ & & \sum_{j=0}^{K} \alpha_{j} \lambda_{n}^{j}\end{array}\right) =\sum_{j=0}^{K} \alpha_{j} \Lambda^{j}

    • Uj=0KαjΛjUT=j=0KαjUΛjUT=j=0KαjLjU \sum_{j=0}^{K} \alpha_{j} \Lambda^{j} U^{T}=\sum_{j=0}^{K} \alpha_{j} U \Lambda^{j} U^{T}=\sum_{j=0}^{K} \alpha_{j} L^{j}

  • 最终

    • youtput =σ(j=0K1αjLjx)y_{\text {output }}=\sigma\left(\sum_{j=0}^{K-1} \alpha_{j} L^{j} x\right)

[[Semi-Supervised Classification with Graph Convolutional Networks]] 利用 Chebyshev 多项式作为卷积核

  • H(l+1)=σ(D~12A~D~12H(l)W(l))H^{(l+1)}=\sigma ( \tilde{D} ^ {-\frac{1}{2}} \tilde{A} \tilde{D} ^ {-\frac{1}{2}} H^{(l)} W^{(l)})

GCN 缺点

  • 训练时需要整个图的结构信息,因此是 transductive 的(训练阶段与预测阶段都是基于同样的图结构)。无法处理 inductive 任务(动态图问题,训练在子图上进行,测试阶段需要处理未知的顶点)

  • 不能处理有向图,不容易实现分配不通的学习权重给不通的 neighbor

    • 拉普拉斯举证的特征分解需要拉普拉斯矩阵是对称矩阵

[[Ref]]


GMM

解决高斯分布的单峰性,引入多个高斯模型加权平均拟合数据

几何角度

  • p(x)=k=1KαkN(μk,Σk),α=1p(x)=\sum _{k=1}^{K} \alpha _k N( \mu _k, \Sigma _k), \sum \alpha = 1

生成模型角度

  • 利用离散变量 z 来选择来自哪一个高斯分布

  • p(x)=zp(x,z)=k=1Kp(x,z=k)=k=1Kp(z=k)p(xz=k)p(x)=\sum\limits_zp(x,z)=\sum\limits_{k=1}^Kp(x,z=k)=\sum\limits_{k=1}^Kp(z=k)p(x|z=k)

  • 得到 $$p(x)=\sum\limits_{k=1}^Kp_k\mathcal{N}(x|\mu_k,\Sigma_k)$$
    [[MLE]] 求解

  • 求解上面的 px

  • θMLE=argmaxθlogp(X)=argmaxθi=1Nlogp(xi)=argmaxθi=1Nlogk=1KpkN(xiμk,Σk)\theta_{MLE}=\mathop{argmax}\limits_{\theta}\log p(X)=\mathop{argmax}_{\theta}\sum\limits_{i=1}^N\log p(x_i)=\mathop{argmax}_\theta\sum\limits_{i=1}^N\log \sum\limits_{k=1}^Kp_k\mathcal{N}(x_i|\mu_k,\Sigma_k)

  • log 中有连加号存在,无法求出解析解。
    [[EM]] 求解

  • EM 目标求解:θ(t+1)=argmaxθZlog[p(X,Zθ)]p(ZX,θ(t))dZ=argmaxθEzx,θt[logp(X,Zθ)]\theta ^{(t+1)} = \arg \max _{\theta} \int _Z \log [p(X,Z|\theta)]p(Z|X, \theta ^{(t)})dZ = \arg \max _{\theta} E _{z|x,{\theta ^t}} [\log p(X,Z|\theta)]

  • E-Step

    • Q(θ,θt)=z[logi=1Np(xi,ziθ)]i=1Np(zixi,θt)Q(\theta,\theta^t)=\sum\limits_z[\log\prod\limits_{i=1}^Np(x_i,z_i|\theta)]\prod \limits_{i=1}^Np(z_i|x_i,\theta^t)\\

+ 对第一个累加号展开,第一项为: + $$\sum\limits_z\log p(x_1,z_1|\theta)\prod\limits_{i=1}^Np(z_i|x_i,\theta^t)=\sum\limits_z\log p(x_1,z_1|\theta)p(z_1|x_1,\theta^t)\prod\limits_{i=2}^Np(z_i|x_i,\theta^t)\\ =\sum\limits_{z_1}\log p(x_1,z_1|\theta) p(z_1|x_1,\theta^t)\sum\limits_{z_2,\cdots,z_K}\prod\limits_{i=2}^Np(z_i|x_i,\theta^t)\\ =\sum\limits_{z_1}\log p(x_1,z_1|\theta)p(z_1|x_1,\theta^t)

  + 后面与 1 无关求和结果为1

+ $$Q(\theta,\theta^t)=\sum\limits_{i=1}^N\sum\limits_{z_i}\log p(x_i,z_i|\theta)p(z_i|x_i,\theta^t)$$

  + $$p(x,z|\theta)=p(z|\theta)p(x|z,\theta)=p_z\mathcal{N}(x|\mu_z,\Sigma_z)$$

  + $$p(z|x,\theta^t)=\frac{p(x,z|\theta^t)}{p(x|\theta^t)}=\frac{p_z^t\mathcal{N}(x|\mu_z^t,\Sigma_z^t)}{\sum\limits_kp_k^t\mathcal{N}(x|\mu_k^t,\Sigma_k^t)}$$

+ $$Q=\sum\limits_{i=1}^N\sum\limits_{z_i}\log p_{z_i}\mathcal{N(x_i|\mu_{z_i},\Sigma_{z_i})}\frac{p_{z_i}^t\mathcal{N}(x_i|\mu_{z_i}^t,\Sigma_{z_i}^t)}{\sum\limits_kp_k^t\mathcal{N}(x_i|\mu_k^t,\Sigma_k^t)}$$
  • M-Step

    • Q=k=1Ki=1N[logpk+logN(xiμk,Σk)]p(zi=kxi,θt)Q=\sum\limits_{k=1}^K\sum\limits_{i=1}^N[\log p_k + \log \mathcal{N}(x_i|\mu_k,\Sigma_k)]p(z_i=k|x_i,\theta^t)

    • pkt+1=argmaxpkk=1Ki=1N[logpk+logN(xiμk,Σk)]p(zi=kxi,θt) s.t. k=1Kpk=1p_k^{t+1}=\mathop{argmax}_{p_k}\sum\limits_{k=1}^K\sum\limits_{i=1}^N[\log p_k+\log \mathcal{N}(x_i|\mu_k,\Sigma_k)]p(z_i=k|x_i,\theta^t)\ s.t.\ \sum\limits_{k=1}^Kp_k=1

      • 化简 $$p_k{t+1}=\mathop{argmax}_{p_k}\sum\limits_{k=1}K\sum\limits_{i=1}^N\log p_kp(z_i=k|x_i,\thetat) s.t. \sum\limits_{k=1}Kp_k=1$$

      • [[Lagrange Multiplier]] $$L(p_k,\lambda)=\sum\limits_{k=1}K\sum\limits_{i=1}N\log p_kp(z_i=k|x_i,\thetat)-\lambda(1-\sum\limits_{k=1}Kp_k)$$

      • [[Lagrange]] $$L(p_k,\lambda)=\sum\limits_{k=1}K\sum\limits_{i=1}N\log p_kp(z_i=k|x_i,\thetat)-\lambda(1-\sum\limits_{k=1}Kp_k)$$

      • pkL=i=1N1pkp(zi=kxi,θt)+λ=0\frac{\partial}{\partial p_k}L=\sum\limits_{i=1}^N\frac{1}{p_k}p(z_i=k|x_i,\theta^t)+\lambda=0\\

\Rightarrow\lambda=-N$$

  + $$p_k^{t+1}=\frac{1}{N}\sum\limits_{i=1}^Np(z_i=k|x_i,\theta^t)$$

+ $$\mu_k,\Sigma_k$$ 无约束参数,直接求导

对比 MLE 和 EM 在求解 GMM 问题上的区别

  • θMLE=argmaxθlogp(X)=argmaxθi=1Nlogp(xi)=argmaxθi=1Nlogk=1KpkN(xiμk,Σk)\theta_{MLE}=\mathop{argmax}\limits_{\theta}\log p(X)=\mathop{argmax}_{\theta}\sum\limits_{i=1}^N\log p(x_i)=\mathop{argmax}_\theta\sum\limits_{i=1}^N\log \sum\limits_{k=1}^Kp_k\mathcal{N}(x_i|\mu_k,\Sigma_k)

  • Q=k=1Ki=1N[logpk+logN(xiμk,Σk)]p(zi=kxi,θt)Q=\sum\limits_{k=1}^K\sum\limits_{i=1}^N[\log p_k + \log \mathcal{N}(x_i|\mu_k,\Sigma_k)]p(z_i=k|x_i,\theta^t)

  • 极大似然需要计算 $$P(X)$$,EM 计算 $$P(X,Z)$$。$$P(X) = \sum _Z P(X,Z)$$,每次单独考虑 $$P(X,Z)$$,避免在 log 中求和。

E 和 M 具体的含义还没有整理!


GNN

任务分类

  • Graph-level task

  • Node-level task

  • Edge-level task

可以利用的信息

  • nodes,

  • edges,

  • global-context

    • master node or context vector

      • 和全部的点或边相连接

      • 解决 node 和 edge 信息传递速度太慢

  • connectivity

无监督的节点表示学习

图分类

  • 同质图 Homogeneity

    • 图中的节点类型和关系类型都仅有一种
  • 异质图

    • 图中的节点类型或关系类型多于一种
  • 属性图

    • 异质图基础上增加了额外的属性信息

问题

  • oversmoothing

Ref

+ [\[\[inductive bias\]\]](/post/logseq/inductive%20bias.html)

  + graph symmetries 对称性 permutation invariance

    + 交换顶点或边顺序,gnn 保持不变

+ Edges and the Graph Dual

  + 点和边互换

+ Graph convolutions as matrix multiplications, and matrix multiplications as walks on a graph

  + 图上做卷积相当于顶点的邻接矩阵做矩阵乘法

+ [\[\[GAT\]\]](/post/logseq/GAT.html) 对邻居的位置不敏感

  + 权重和两个顶点向量相关,和位置无关

Git/Hooks

Hooks 可以实现在 git 命令后,触发额外的脚本。初始化 git 项目时,会在 .git/Hooks 目录中生成一些 sample 文件。

举个例子,这个站点的 md 源文件放在 writing/notes 目录中,站点对应的项目是 xiang578/gru。每一次更新笔记后,需要手动将文件从 writing/notes 复制到 gru/docs,然后再 push 到 github 中部署。

  • 新建脚本 gru/.git/post-commitpost-commit 代表这个脚本会在 commit 时触发,脚本代码如下:
1
2
3
4
5
6
7
8
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.

tmp=../gru/
cd $tmp
cp -rf ../writing/notes/* docs/.

Ref


Git/代理

直接使用 [[Clash]] 终端代理命令,然后使用 https 下载

设置代理

1
2
3
git config --global http.proxy socks5://127.0.0.1:7890
git config --global https.proxy socks5://127.0.0.1:7890
git config --global http.sslVerify false

取消代理

1
2
git config --global --unset http.proxy 
git config --global --unset https.proxy

通过 .ssh/config 配置

1
2
3
#ssh .ssh/config
Host github.com bitbucket.org
ProxyCommand nc -x 127.0.0.1:7890 %h %p

Git/submodule

增加新的子库

  • git submodule add url

子库更新到最新版本

  • git submodule update --remote

新项目初始化所有子库

  • git submodule init

  • git submodule update


GraphSAGE

Inductive Representation Learning on Large Graphs

  • [[Inductive Learning]]

GraphSAGE 是一种 inductive 的顶点 embedding 方法

aggregator functions 融合目标节点领域的特征,需要具有对称性

  • mean-aggregator 邻居先求平均,然后 concat 当前节点过全连接

    • hN(v)kMEANk({huk1,uN(v)})\mathbf{h}_{\mathcal{N}(v)}^{k} \leftarrow MEAN _{k}\left(\left\{\mathbf{h}_{u}^{k-1}, \forall u \in \mathcal{N}(v)\right\}\right)

    • hvkσ(WkCONCAT(hvk1,hN(v)k))\mathbf{h}_{v}^{k} \leftarrow \sigma\left(\mathbf{W}^{k} \cdot \operatorname{CONCAT}\left(\mathbf{h}_{v}^{k-1}, \mathbf{h}_{\mathcal{N}(v)}^{k}\right)\right)

      • 将领域融合的特征和节点本身的特征进行拼接,通过神经网络更新每个节点的特征。

      • 局部频域卷积的一个线性近似

    • gcn aggregator 结点和邻居先求平均,然后过全连接

      • hvkσ(WMEAN({hvk1}{huk1,uN(v)})\mathbf{h}_{v}^{k} \leftarrow \sigma\left(\mathbf{W} \cdot \operatorname{MEAN}\left(\left\{\mathbf{h}_{v}^{k-1}\right\} \cup\left\{\mathbf{h}_{u}^{k-1}, \forall u \in \mathcal{N}(v)\right\}\right)\right.

      • 和上一个区别在于当前节点信息什么时候和邻居节点融合,mean 是在 nn 层融合,gcn 是先求平均。

  • lstm

    • 非对称,通过邻居随机排列来调整对无序集的支持
  • pooling aggregator

    • hN(v)(k)=max({σ(Wpool hu(k1)+bpool )uN(v)})\overrightarrow{\mathbf{h}}_{\mathcal{N}(v)}^{(k)}=\max \left(\left\{\sigma\left(\mathbf{W}_{\text {pool }} \overrightarrow{\mathbf{h}}_{u}^{(k-1)}+\overrightarrow{\mathbf{b}}_{\text {pool }}\right) \mid u \in \mathcal{N}(v)\right\}\right)

    • 领域内每个顶点的特征向量通过全链接神经网络独立计算,然脏通过一个逐元素的最大池化来聚合领域信息

如何定义损失函数?

  • 监督学习 [[Cross Entropy]]

  • 无监督学习

    • JG(zu)=log(σ(zuzv))QEvnPn(v)log(σ(zuzvn))J_{\mathcal{G}}\left(\mathbf{z}_{u}\right)=-\log \left(\sigma\left(\mathbf{z}_{u}^{\top} \mathbf{z}_{v}\right)\right)-Q \cdot \mathbb{E}_{v_{n} \sim P_{n}(v)} \log \left(\sigma\left(-\mathbf{z}_{u}^{\top} \mathbf{z}_{v_{n}}\right)\right)

    • 顶点 u 和顶点 v 是在长度为 l 的 random walk 上共现的顶点。

      • 相邻顶点的表示类似,负采样不类似
    • Pn(v)P_n(v) 负采样的分布函数

邻域

  • 均匀采样得到固定大小的领域 N(v)\mathcal{N}(v), 确保每个 batch 的计算代价是固定的。

    • 顶点 v 在每一层采样不同的领域,在不同层的领域大小都不同。

    • 实验中 2 层,且两次领域数乘积小于 500

[[Ref]]


Importance Sampling

[[Monte Carlo]],[[近似求定积分]]

  • f(x) 在 [a,b] 上的积分很难直接求,利用采样的方法进行计算。

  • abf(x)dx=baNi=1Nf(xi)\int_{a}^{b} f(x) d x=\frac{b-a}{N} \sum_{i=1}^{N} f\left(x_{i}\right)

假设需要估计期望 Exp[f(x)]E_{x \sim p}[f(x)]pp 表示采样变量 xx 的分布

  • Exp[f(x)]E_{x^{\sim} p}[f(x)] :-> p(x)f(x)dx1Ni=1Nf(xi)\int p(x) f(x) d x \approx \frac{1}{N} \sum_{i=1}^N f\left(x_i\right)

    • 如果分布 pp 很难积分 :-> 通过 pp 采样来进行期望的估计
    • 如果 pp 采样很麻烦 :-> 用更简单的已知分布 qq 来代为采样
  • qq 分布下计算期望公式 :-> Exp[f(x)]=Exq[p(x)q(x)f(x)]E_{x^{\sim} p}[f(x)]=E_{x^{\sim} q}[\frac{p(x)}{q(x)}f(x)]
    重要性采样对估计的 [[方差与均值]] 影响 :-> 均值一致,但方差并不能确定一致

  • 已知期望计算方差公式 :-> Var(x)=E(x2)[E(x)]2\operatorname{Var}(x)=E\left(x^2\right)-[E(x)]^2

    • 原分布p方差定义为 :-> Varxp[f(x)]=Exp[f(x)2](Exp[f(x)])2\operatorname{Var}_{x^{\sim}p}[f(x)]=E_{x^{\sim}p}\left[f(x)^{2}\right]-\left(E_{x^{\sim}p}[f(x)]\right)^{2}

    • 新分布q方差 :-> Varxq[f(x)p(x)q(x)]=Exq[(f(x)p(x)q(x))2](Exq[f(x)p(x)q(x)])2{\operatorname{Var}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]=E_{x \sim q}\left[\left(f(x) \frac{p(x)}{q(x)}\right)^{2}\right]-\left(E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]\right)^{2}}

      • 最终方差 :-> Varxq[p(x)q(x)f(x)]=Exp[p(x)q(x)f(x)2](Exp[f(x)])2\operatorname{Var}_{x^{\sim} q}\left[\frac{p(x)}{q(x)} f(x)\right]=E_{x^{\sim} p}\left[\frac{p(x)}{q(x)} f(x)^2\right]-\left(E_{x^{\sim} p}[f(x)]\right)^2
        • 如何推导出最终方差 #card
          • Exq[(p(x)q(x)f(x))2]=(p(x)q(x)f(x))2q(x)dx=p(x)q(x)f(x)2p(x)dx=Exp[p(x)q(x)f(x)2]E_{x^{\sim} q}\left[\left(\frac{p(x)}{q(x)} f(x)\right)^2\right]=\int\left(\frac{p(x)}{q(x)} f(x)\right)^2 q(x) d x=\int \frac{p(x)}{q(x)} f(x)^2 p(x) d x=E_{x^{\sim} p}\left[\frac{p(x)}{q(x)} f(x)^2\right]
          • (Exq[p(x)q(x)f(x)])2=(Exp[f(x)])2\left(E_{x^{\sim} q}\left[\frac{p(x)}{q(x)} f(x)\right]\right)^2=\left(E_{x^{\sim} p}[f(x)]\right)^2
  • 根据 原分布p方差定义为 :-> Varxp[f(x)]=Exp[f(x)2](Exp[f(x)])2\operatorname{Var}_{x^{\sim}p}[f(x)]=E_{x^{\sim}p}\left[f(x)^{2}\right]-\left(E_{x^{\sim}p}[f(x)]\right)^{2}
    和 ((66dc826d-6ba6-4a23-bf77-ce297d3e25d3))

    • 当分布 p、q 越接近, 其方差就越接近 ,而如果两者差距很大时, 则方差差别很大
    • [[Importance Weight]] :<-> p(x)q(x)\frac{p(x)}{q(x)}
    • 在采样次数较少时,基于重要性采样得到的样本并不能 很好反映变量的原始分布 ,从而产生较大误差。
      image.png

[[Ref]]

[[李宏毅@强化学习]]

[[PPO]] 中实现

  • 在每次策略更新之前,使用旧策略采集的一批轨迹数据。

  • 对于每个轨迹数据点,计算新策略在旧策略下的采样概率比率,即重要性采样比率。比率的计算可以根据具体的策略表示形式进行推导。

  • 根据重要性采样比率,对采样的数据点计算重要性采样权重,用于校正策略梯度的估计。权重的计算通常是将比率取倒数,并进行归一化处理。

  • 使用校正后的重要性采样权重来计算策略梯度,并进行策略更新。

[[PPO 基本训练流程]]


Informer/Code

encoder 输入

  • feature 特征张量 (336,7) + 时间特征张量 (336,4)

decoder 输入

  • feature 特征张量 (336+168,7) + 时间特征张量 (336+168,4)

  • 168 是一次需要预测的长度

Encoder

  • forward

ProbAttention

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
def forward(self, queries, keys, values, attn_mask):
import ipdb; ipdb.set_trace()
B, L_Q, H, D = queries.shape # [32, 336, 8, 64]
_, L_K, _, _ = keys.shape # [32, 336, 8, 64]

queries = queries.transpose(2,1) # [32, 8, 336, 64]
keys = keys.transpose(2,1) # [32, 8, 336, 64]
values = values.transpose(2,1) # [32, 8, 336, 64]

U_part = self.factor * np.ceil(np.log(L_K)).astype('int').item() # c*ln(L_k)
# self.factor=5 and np.log(L_K)=5.82 -> 6
# so, U_part = 5 * 6 = 30

u = self.factor * np.ceil(np.log(L_Q)).astype('int').item() # c*ln(L_q)
# u = 30

U_part = U_part if U_part<L_K else L_K # 30
u = u if u<L_Q else L_Q # 30

scores_top, index = self._prob_QK(queries, keys, sample_k=U_part, n_top=u)
# 上面这个方法最重要!
# [32, 8, 30, 336] and [32, 8, 30] 这是8个heads,每个head下都是选择了前30的query tokens(各自选择的)
# 含义:(1) scores_top, i.e., Q_K是类似原始transformer中的Q*K^T
# (2) index, i.e., M_top则是说,是32个序列,每个序列下8个heads,
# 每个head下M得分靠前的top-30的query的indices(索引)

# add scale factor
scale = self.scale or 1./sqrt(D) # 1./sqrt(64) = 1./8 = 0.125
if scale is not None:
scores_top = scores_top * scale # Q*K^T/sqrt(D)

# get the context
context = self._get_initial_context(values, L_Q)
# [32, 8, 336, 64]

# update the context with selected top_k queries
context, attn = self._update_context(context, values, scores_top, index, L_Q, attn_mask)
# [32, 8, 336, 64], None (如果attn!=None,那么其shape为:[32, 8, 336, 336])

import ipdb; ipdb.set_trace()
return context.transpose(2,1).contiguous(), attn
# [32, 336, 8, 64]

_get_initial_context

  • V(B,H,L,E) 求平均变成 V(B,H,E),然后再复制成和原来大小相同的矩阵

_update_context

  • 更新 index 指定 30 个位置的值,其他值是 _get_initial_context 初始化的平均结果

_prob_QK

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
def _prob_QK(self, Q, K, sample_k, n_top): # n_top: c*ln(L_q)
# Q [B, H, L, D]
B, H, L_K, E = K.shape # torch.Size([32, 8, 336, 64])
_, _, L_Q, _ = Q.shape # torch.Size([32, 8, 336, 64])

# calculate the sampled Q_K
K_expand = K.unsqueeze(-3).expand(B, H, L_Q, L_K, E)
# [32, 8, 336, 64] -> [32, 8, 1, 336, 64] -> [32, 8, 336, 336, 64]
# expand之后,K_expand[0][0][0][0] = K_expand[0][0][1][0] 都是64维度的向量了

index_sample = torch.randint(L_K, (L_Q, sample_k)) # real U = U_part(factor*ln(L_k))*L_q
# sample_k=30, 这相当于从336里面选择30个
# index_sample.shape = [336, 30],
# L_K是指定最大值(exclusive),最小值default=0(inclusive), 形状为(L_Q, sample_k)

K_sample = K_expand[:, :, torch.arange(L_Q).unsqueeze(1), index_sample, :]
# 起初的K_expand的shape为:[32, 8, 336, 336, 64]
# :, :, [336, 1], [336, 30], : [why???]
# K_sample.shape = [32, 8, 336, 30, 64]

Q_K_sample = torch.matmul(Q.unsqueeze(-2), K_sample.transpose(-2, -1)).squeeze(-2)
# [32, 8, 336, 1, 64] * [32, 8, 336, 64, 30] -> [32, 8, 336, 1, 30] -> [32, 8, 336, 30]

# find the Top_k query with sparisty measurement
M = Q_K_sample.max(-1)[0] - torch.div(Q_K_sample.sum(-1), L_K)
# 上面这个实现的就是论文中的那个非常nb的关于query的重要度的公式了,Equation (4)
# M.shape = [32, 8, 336]

M_top = M.topk(n_top, sorted=False)[1]
# [0]=values, [1]=indices
# M_top.shape = [32, 8, 30],相当于336个queries里面选择了30个top-k query tokens

# use the reduced Q to calculate Q_K
Q_reduce = Q[torch.arange(B)[:, None, None], # [32, 1, 1]
torch.arange(H)[None, :, None], # [1, 8, 1]
M_top, :] # factor*ln(L_q)
# 起初Q.shape = [32, 8, 336, 64], reduce之后,就是
# Q_reduce.shape = [32, 8, 30, 64]

Q_K = torch.matmul(Q_reduce, K.transpose(-2, -1)) # factor*ln(L_q)*L_k
# [32, 8, 30, 64] * [32, 8, 64, 336] -> [32, 8, 30, 336]
# 30个query tokens,和336个key tokens的dot product values

return Q_K, M_top
# [32, 8, 30, 336] and [32, 8, 30] 这是8个heads,每个head下都是选择了前30的query tokens(各自选择的)
# 含义:Q_K是类似原始transformer中的Q*K^T
# M_top则是说,是32个序列,每个序列下8个heads,每个head下M得分靠前的top-30的query的indices(索引)

Ref


Initialization

影响模型的收敛速度和模型质量。

[[Batch Normalization]] 可以有效降低深度网络对 weight 初始化的依赖。非线性计算之前,输出值有较好的分布。BN 强行将输出值做一次高斯变换和线性变换。

常量初始化

高斯分布初始化

  • tf.truncated_normal 按两倍标准差截断

  • tf.random_normal

[[正交初始化]]

不同方法的均值和方差

  • [[He Initialization]] :<-> 0 均值,标准差为 sqrt(2 / fan_in)
  • [[Xavier Initialization]] :<-> 0 均值,标准差为 sqrt(2 / (fan_in + fan_out))
    card-last-score:: 5
    card-repeats:: 1
    card-next-schedule:: 2023-07-23T14:52:57.521Z
    card-last-interval:: 4

See Also

  • [[神经网络参数全部初始化为0]] 不可行

Ref


Interpretable Multi-Head Attention

Interpretable Multi-Head Attention
ls-type:: annotation
hl-page:: 9
hl-color:: yellow

相对于 [[Multi-Head Attention]] 的修改

  • 参数角度 #card

    • 针对 V 是多头共享参数 share values in each head
      ls-type:: annotation
      hl-page:: 9
      hl-color:: yellow

    • 对 Q 和 K 是多头独立参数

      • 每个头使用不同的值,仅凭注意力权重无法表明特定特征的重要性 Given that different values are used in each head, attention weights alone would not be indicative of a particular feature’s importance.
        ls-type:: annotation
        hl-page:: 9
        hl-color:: yellow
  • Attention score 使用方式 #card

    • 计算多头 attention score 加权后的 V(求平均), employ additive aggregation of all heads
      ls-type:: annotation
      hl-page:: 9
      hl-color:: yellow

    • 原始方法中是 concat

#card InterpretableMultiHead (Q,K,V)=H~WH(\boldsymbol{Q}, \boldsymbol{K}, \boldsymbol{V})=\tilde{\boldsymbol{H}} \boldsymbol{W}_H 公式

  • H~=A~(Q,K)VWV={1/Hh=1mHA(QWQ(h),KWK(h))}VWV=1/Hh=1mH Attention (QWQ(h),KWK(h),VWV)\begin{aligned} \tilde{\boldsymbol{H}} & =\tilde{A}(\boldsymbol{Q}, \boldsymbol{K}) \boldsymbol{V} \boldsymbol{W}_V \\ & =\left\{1 / H \sum_{h=1}^{m_H} A\left(\boldsymbol{Q} \boldsymbol{W}_Q^{(h)}, \boldsymbol{K} \boldsymbol{W}_K^{(h)}\right)\right\} \boldsymbol{V} \boldsymbol{W}_V \\ & =1 / H \sum_{h=1}^{m_H} \text { Attention }\left(\boldsymbol{Q} \boldsymbol{W}_Q^{(h)}, \boldsymbol{K} \boldsymbol{W}_K^{(h)}, \boldsymbol{V} \boldsymbol{W}_V\right)\end{aligned}

KL Divergence

作用:衡量 两个分布之间的距离
为什么不对称 :-> 计算两个分布之间的不同,从分布 A 的角度看分布 B 的相似程度
特点

  • 1.非负性::<-> KL(PQ)0\mathrm{KL}(\mathrm{P} \| \mathrm{Q}) \geq 0
  • 2.非对称性 :<-> KL(PQ)KL(QP)K L(P \| Q) \neq K L(Q \| P)
  • 3.当且仅当 P=QP=Q 时 :<-> KL(PQ)=0K L(P \| Q)=0
    一个分布相比于另外一个分布的信息损失。

DKL(AB)=iPA(xi)log(PA(xi)PB(xi))=iPA(xi)log(PA(xi))PA(xi)log(PB(xi))D_{K L}(A \| B)=\sum_{i} P_{A}\left(x_{i}\right) \log \left(\frac{P_{A}\left(x_{i}\right)}{P_{B}\left(x_{i}\right)}\right)=\sum_{i} P_{A}\left(x_{i}\right) \log \left(P_{A}\left(x_{i}\right)\right)-P_{A}\left(x_{i}\right) \log \left(P_{B}\left(x_{i}\right)\right)

A和B的交叉熵 = A与B的KL散度 - A的熵。

  • DKL(AB)=H(A,B)H(A){D_{K L}(A \| B)=H(A, B)-H(A)}
    机器学习模型学到的分布和真实数据的分布越接近越好,但是现实中只能让模型学到的分布和训练数据的分布尽量相同,即 KL 散度最小。

  • 熵 H(A) 是不依赖 B 的常数,固定 A,根据上面的公式最小化 KL 相当于最小化 H(A, B)。

  • 由于训练数据是固定的,H(A) 不变。

  • 如果 A 是固定的,关于 B 的优化 KL 散度等于优化交叉熵。

P 真实样本的分布,Q模型预测样本的分布,如果 Q 越接近 P,散度就越小。散度的值非负。

  • P 是未知分布,Q 是已知分布

  • D(pq)=xp(x)logp(x)q(x)=Ep(x)(logp(x)q(x))D(p \| q)=\sum_{x} p(x) \log \frac{p(x)}{q(x)}=E_{p(x)}\left(\log \frac{p(x)}{q(x)}\right)
    [[@百面机器学习]]

  • KL 距离不是真正的距离,不满足 三角形不等式交换律
    KL散度理解 - 知乎

  • 如何证明 KL 散度大于等于 0 #card

    • KL(PQ)=P(x)lnP(x)Q(x)dx=P(x)lnQ(x)P(x)dxP(x)(Q(x)P(x)1)dx=Q(x)P(x)dx=0\begin{aligned} \mathrm{KL}(P \| Q) & =\int P(x) \ln \frac{P(x)}{Q(x)} d x \\ & =-\int P(x) \ln \frac{Q(x)}{P(x)} d x \\ & \geq-\int P(x)\left(\frac{Q(x)}{P(x)}-1\right) d x \\ & =-\int Q(x)-P(x) d x \\ & =0\end{aligned}

    • 推导中第三行利用不等式 ln(x)x1ln(x) \le x-1

    • 最后一行 Q(x)Q(x)P(x)P(x) 都是概率密度函数,所以积分值都等于1

  • 最小化 Kullback-Leibler 散度等价于最大化似然函数


L1 和 L2 正则

梯度角度

  • L1 当w大于0时,更新的参数w变小;当w小于0时,更新的参数w变大

  • L2 正常的更新参数多了一项 $$\frac{w}{n}$$,当w趋向于0时,参数减小的非常缓慢,因此L2正则化使参数减小到很小的范围,但不为0。

解空间角度

image.png

  • 上图的图形给出一个直观的解释,但是需要思考细节

    • 黄色的范围是参数的空间,向 0 收缩。

    • 两个圆的交点,就是我们需要求的参数。

  • L1 正则中交点有更大概率在坐标轴上,大量参数是 0 :<-> 求解出现的参数比较稀疏。

  • [[为什么加入正则是定义一个解空间的约束?]]

    • [[KKT]]: mini=1N(yiwTxi)2\min \sum_{i=1}^N\left(y_i-w^T x_i\right)^2 加入正则等价于增加 :-> 一个不等式约束条件 s.t. w22m\|w\|_2^2 \leq m
      • 拉格朗日函数 :-> i=1N(yiwTxi)2+λ(w22m)\sum_{i=1}^{N}\left(y_{i}-w^{\mathrm{T}} x_{i}\right)^{2}+\lambda\left(\|w\|_{2}^{2}-m\right)
        • 最优解 ww^*λ\lambda^* 满足 :-> w(i=1N(yiwTxi)2+λ(w22m))=0\nabla_w\left(\sum_{i=1}^N\left(y_i-w^{* T} x_i\right)^2+\lambda^*\left(\left\|w^*\right\|_2^2-m\right)\right)=0
          • λ\lambda^* 限制条件 :-> λ0\lambda^* \geq 0
          • ww^* 对应 :-> L2正则项的优化问题的最优解条件
          • λ\lambda 对应 :-> L2正则项前面的正则参数
          • w 的 L2 范数 不能大于 m
      • L1 和 L2 的解空间区别体现在 对应 KKT 问题的不等式条件 不同
        贝叶斯先验 [[L1和L2正则的先验分布]]
  • 高斯分布 w 在极值点处平滑,w 在附近取不同值的可能性是接近的。L2 正则让 w 更接近于 0 但不会取 0。
    image.png

  • [[Laplace Distribution]] 0 点处是一个尖峰,参数 w 取值为 0 概率更大。

    • 可以用于稀疏权值矩阵,用于特征选择,实现参数稀疏化。

image.png
带不同正则化目标函数对比

image.png
occlusion:: eyIuLi9hc3NldHMvaW1hZ2VfMTcyNjc1MDU3MTA0NV8wLnBuZyI6eyJjb25maWciOnt9LCJlbGVtZW50cyI6W3sibGVmdCI6Mjk3Ljg0NDAwNDYwMDM0NDEsInRvcCI6OTcuMjkyMzQxMjYyMTA2MjUsIndpZHRoIjo0Ny42OTE1NTY2OTYzMjc3MywiaGVpZ2h0Ijo1MC41OTYzNjk5MzMyNzM5OSwiYW5nbGUiOjAsImNJZCI6MX0seyJsZWZ0IjozNTQuODQ1NzU5MDY4Mjk2MiwidG9wIjoyNDMuNzk2NDM0NjExNzQyMTQsIndpZHRoIjo0OS42ODg2MDY4NzY1ODQwMDQsImhlaWdodCI6MzcuNTkyMDQyMjg0MTYzOTk1LCJhbmdsZSI6MCwiY0lkIjoxfV19fQ==


L1和L2正则的先验分布

[[MAP]] 公式 :-> logP(x,w)P(w)=logP(x,w)+logP(w){\log P(x,w)P(w) = \log P(x,w) + \log P(w)}

  • [[L2 Regularization]] 中参数先验分布 [[Normal Distribution]]
    + P(wj)P(w_j) :-> 1σ2πe(wj)22σ2\frac{1}{\sigma \sqrt{2 \pi}} e^{-\frac{(w_j)^{2}}{2 \sigma^{2}}}
    + logP(w)=logjP(wj)=logj[12πσe(wj)22σ2]\log P(w)=\log \prod_{j} P\left(w_{j}\right)= \log \prod_{j}\left[\frac{1}{\sqrt{2 \pi} \sigma} e^{-\frac{\left(w_{j}\right)^{2}}{2 \sigma^{2}}}\right] :<-> 12σ2jwj2+C-\frac{1}{2 \sigma^{2}} \sum_{j} w_{j}^{2}+C
  • [[L1 Regularization]] 中参数先验分布 [[Laplace Distribution]]
    + P(wj)P\left(w_{j}\right) :-> 12aewja\frac{1}{\sqrt{2 a}} e^{\frac{\left|w_{j}\right|}{a}}
    + logP(w)=logjP(wj)=logj[12aσewja]\log P(w)=\log \prod_{j} P\left(w_{j}\right)=\log \prod_{j}\left[\frac{1}{\sqrt{2 a} \sigma} e^{-\frac{w_{j}}{a}}\right] :<-> 12ajwj+C-\frac{1}{2 a} \sum_{j}\left|w_{j}\right|+C
    id:: 3c341e2e-412f-4ca1-a4cb-d8175fdb21ad

LC2363. 合并相似的物品

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
vector<vector<int>> mergeSimilarItems(vector<vector<int>>& items1, vector<vector<int>>& items2) {
map<int, int>a;
for(auto item:items1) {
a[item[0]] = item[1];
}
for(auto item:items2) {
if (a.find(item[0]) == a.end()) {
a[item[0]] = 0;
}
a[item[0]] += item[1];
}
vector<vector<int>> ans;
for(auto aa=a.begin();aa!=a.end();aa++) {
ans.push_back(vector{aa->first, aa->second});
}
return ans;
}
};

LLM

[[QWen]]

[[LLaMA]]

[[GLM]]

[[Kimi]]

[[deepseek]]

[[MiniMax]]

[[Mistral]]


Laplacian matrix

图的矩阵表示

L=DAL=D-A

  • L 是 Laplacian 矩阵

  • D 是顶点的度矩阵,对角线上的元素依次是各个顶点的度

  • A 是图的邻接矩阵

常用拉普拉斯矩阵

  • Combinatorial Laplacian

    • L=DAL=D-A

    • 方阵,主对角线出度,-1 代表两点一阶连通

    • D1D^{-1} 顶点是度的倒数

    • D1AD^{-1} A 归一化,最后每行和为 1

    • D~12A~D~12\tilde{D} ^ {-\frac{1}{2}} \tilde{A} \tilde{D} ^ {-\frac{1}{2}} 利用对称矩阵的形式归一化 renormalization

  • 对称归一化的拉普拉斯矩阵(Symmetric normalized Laplacian)

    • Lsys=D1/2LD1/2L^{s y s}=D^{-1 / 2} L D^{-1 / 2}
  • 随机游走归一化拉普拉斯矩阵(Random walk normalized Laplacian)

    • Lrw=D1LL^{r w}=D^{-1} L

无向图的拉普拉斯矩阵性质

  • [[半正定]]

  • 只在中心顶点与一阶相连的顶点上有非0元素

  • 对称,可以进行特征分解 L=UΛU1L=U \Lambda U^{-1}

    • Λ\Lambda 是 n 个特征值构成的对角阵

    • [[特征值]]

    • 可以写成 L=UΛUTL=U \Lambda U^{T}


Large language model

[[Word Embedding]]

[[位置编码]]

[[Transformer]]

模型

  • [[GPT]]

  • [[LLaMA]]

  • [[QWen]]

  • [[GLM]]

  • [[Kimi]]

  • [[deepseek]]

  • [[MiniMax]]

  • [[Mistral]]

强化学习

  • [[LLM 中强化学习讨论]]

其他

  • [[NLP 数据增强方法]]


Learning Rate Decay

训练集的损失下降到一定程度后不在下降,training loss 一直在一个范围内震荡,遇到这种情况可以适当降低学习率。

常用方法

  • 线性衰减,每过 5 个 epochs 学习率减半

  • [[指数衰减]]

    • decayed_learning_rate=learning_rate*decay_rate^(global_step/decay_steps)

[[Adam]] 自适应的优化方法还需要学习率衰减吗?


Learning to Rank

[[Point Wise]]

  • 全局相关性

  • 没有对先后顺序的优劣做惩罚

  • 将 Ranking 算法转化成回归、分类或序列回归

[[Pair Wise]] 二分类

  • 多个 pair 排序问题,比较不同文章的先后顺序

  • 目标

    • 减少误分类 doc pair 的比例
  • 问题

    • 考虑出现的相对位置,但是没有考虑文档在搜索列表中的位置。

      • 排在搜索结果前面的文章更为重要,如果排在靠前的文章出现判断错误,代价明显高于排在后面的文档
    • 不同查询相关文档数量差异大

  • 方法

    • RankNet

    • [[GBRank]]

      • L(f;xu,xv,yu,v)=12(max{0,yu,v(f(xv)f(xu))})2L\left(f ; x_{u}, x_{v}, y_{u, v}\right)=\frac{1}{2}\left(\max \left\{0, y_{u, v}\left(f\left(x_{v}\right)-f\left(x_{u}\right)\right)\right\}\right)^{2}

        • 关注逆序部分

        • 逆序 loss 为正,正序 loss 为零

[[List Wise]]

  • 考虑整体序列,针对 Ranking 评价指标进行优化

  • 方法

    • AdaRank

    • SoftRank

    • [[LambdaMART]]

    • LambdaRank

      • 蓝色表示相关文档,右侧的图片中,虽然指标下降,但是从直觉上来说并不好。

指标

  • MAP(Mean Average Precision)

    • AP=j=1niP(j)yi,jj=1niyi,jA P=\frac{\sum_{j=1}^{n_{i}} P(j) \cdot y_{i, j}}{\sum_{j=1}^{n_{i}} y_{i, j}}

    • P(j)=k:πi(k)yi,kπi(j)P(j)=\frac{\sum_{k: \pi_{i}(k)} \leqslant y_{i, k}}{\pi_{i}(j)}

    • MAP=q=1QAveP(q)QMAP=\frac{\sum_{q=1}^{Q} \operatorname{AveP}(q)}{Q}

      • 所有 query 的 ap 值取平均
    • 例子

      • 假设query_1有4个相关的document,分别被模型排在1,2,5,7位,那么query_1的AP就是(1/1+2/2+3/5+4/7) / 4;

query_2有5个相关的document,分别被模型排在2,3,6,29,58位那么query_2的MAP就是(1/2+2/3+3/6+4/29+5/58) / 5,但通常情况下,我们的 %5B公式%5D 不会取到58,只会关注排名靠前的document,因此排在29与58的document可以视为没有被模型检索出来,假设取m %5B公式%5D ,则query_2的AP是(1/2+2/3+0+0+3/6+0+0)/5。

  + 对以上两个query取平均即可得出MAP。
  • [[NDCG]]

Ref

  • Learning to Rank for Information Retrieval

  • FM模型在LTR类问题中的应用 [[杨镒铭]]

    • L=log(y~ij)=log(1+exp((y~(xi)y~(xj)))L=-\log \left(\tilde{y}_{i j}\right)=\log \left(1+\exp \left(-\left(\tilde{y}\left(x_{i}\right)-\tilde{y}\left(x_{j}\right)\right)\right)\right.


LazyAdam

NLP 之类的任务,每个 batch 采样到的词有限,每次更新对 embedding 的梯度估计是稀疏的,对 momentum-based 的 Optimizer,现在所有框架实现都会用当前的 momentum 去更新所有的词,即时这些词在连续的几十步更新都没有被采样到,这可能会使 embedding 过拟合。

LazyAdam 仅更新当前 batch 中出现的稀疏变量索引的移动平均累加器,而不是更新所有索引的累加器。

Ref


LeetCode

注意事项

  • 统计单词数直接 int a[300] 这样可以省去 - 'a' 这一步操作。

  • 代码中的 printf 不会影响最后的结果,猜测是去比较返回值。

    • 上一条提到的不会影响结果,但是会影响耗时,所以还是要删除中间的输出。
  • 函数里面定义数组,需要初始化。

    • vector<int>v(10, 0)

    • vector<vector<int>> dp(k, vector<int>(1 << n)); 二维 vector

  • sort 手动传入 cmp 需要是 static 类型

  • sort(a.begin(), a.end(), [](vector<int>&x, vector<int>&y){return x[0]<y[0];});

    • lambda 里面的参数需要是引用,如果是拷贝构造,在 n=1e5 时会超时。
  • 枚举子集 | CP Wiki n 个元素的子集枚举 $$O(3^n)$$ 复杂度

    • 枚举 i 的子集
      • (j - 1) 将 j 最右边的 1 变成 0,得到小于 j 最大的一个二进制数
      • (j - 1) & i 保证一定是 i 的子集
1
2
3
4
5
for (int i = 1; i < (1 << n); ++i) {
for (int j = i; j; j = (j - 1) & i) {
// ...
}
}
  • 0x3f3f3f3f 的十进制是1061109567,是10^9级别的,自身相加不会超过 int 范围,可以 memset 初始化

  • [[vector]] 取指定位置的迭代器

1
2
3
4
vector<int>::iterator it;
it = a.begin()+4;
it = advance(a.begin(), 4);
it = next(a.begin(), 4);
  • 位运算的优先级

    • a+b^c
      • 先算 a+b
  • ?=: 运算符优先级

    • (a[i]^b[k]) + i==0?0:dp[i-1][j]
      • 加法优先级大于 ?=:
  • __builtin_popcount

    • 统计一个 int 中 1 的个数
  • 二进制表示中最低位

    • n & (n - 1)

      • 该位运算技巧可以直接将 n 二进制表示的最低位 1 移除
    • n & (-n)

      • 该位运算技巧可以直接获取 n 二进制表示的最低位的 1
  • set、tuple、map 一起使用

1
2
3
4
5
6
7
8
9
10
11
set<tuple<int, int, int>>use;

// 插入元素
use.emplace({1, 2, 3});

// 删除第一个元素
use.erase(use.begin());

//访问
auto p = *use.begin();
int x = std::get<0>(p);

复盘

补题


LSTM

结构

  • 遗忘门 forget gate :<-> Γft=σ(Wf[at1,xt]+bf)\Gamma_f^{\langle t\rangle}=\sigma\left(W_f\left[a^{\langle t-1\rangle}, x^{\langle t\rangle}\right]+b_f\right)

    • 取值范围在 0 到 1

    • 功能 :-> 控制上一个 cell 的状态 ct1c^{t-1},有多少信息进入当前状态 ctc^{t}

  • 更新门 update gate :<-> Γut=σ(Wu[at1,xt]+bu)\Gamma_u^{\langle t\rangle}=\sigma\left(W_u\left[a^{\langle t-1\rangle}, x^{\langle t\rangle}\right]+b_u\right)

    • 功能 :-> 控制输入 xx,有多少信息进入当前状态 ctc^{t}
  • c~(t)\tilde{c}^{(t)} :-> c~(t)=tanh(WC[at1,xt]+bC)\tilde{c}^{(t)}=\tanh \left(W_C\left[a^{\langle t-1\rangle}, x^{\langle t\rangle}\right]+b_C\right)

  • ct=Γftc(t1+Γutc~tc^{\langle t\rangle}=\Gamma_f^{\langle t\rangle} \circ c^{(t-1\rangle}+\Gamma_u^{\langle t\rangle} \circ \tilde{c}^{\langle t\rangle}

  • 输出门 output gate :<-> Γo(t)=σ(Wo[at1,xt]+bo)\Gamma_o^{(t)}=\sigma\left(W_o\left[a^{\langle t-1\rangle}, x^{\langle t\rangle}\right]+b_o\right)

    • 作用 :-> 控制当前状态 ctc^{t} 有多少信息进入 cell 的输出
  • 新的 ata^{\langle t\rangle} 计算方式:-> at=Γottanh(ct)a^{\langle t\rangle}=\Gamma_o^{\langle t\rangle} \circ \tanh \left(c^{\langle t \rangle}\right)
    image.png
    occlusion:: eyIuLi9hc3NldHMvaW1hZ2VfMTcyMzk5MDQxOTk3NF8wLnBuZyI6eyJjb25maWciOnsiaGlkZUFsbFRlc3RPbmUiOnRydWV9LCJlbGVtZW50cyI6W3sibGVmdCI6MzQwLjM5MDM4Mjc3MTYxMjA1LCJ0b3AiOjUxMS4yNzA4NDgyMjA0NTgsIndpZHRoIjoxMjYuNjQzNDg4NDM3ODk3MDIsImhlaWdodCI6NjAuMDcwNzg4OTk5NzMzMzk1LCJhbmdsZSI6MCwiY0lkIjoxfSx7ImxlZnQiOjY5Mi40NDI4NTY5OTEyMDIsInRvcCI6NTE3LjU3MDYzMjMyMDcxMzgsIndpZHRoIjoxMjcuNDkxNDkxMTY5MTE0NDEsImhlaWdodCI6NDQuOTcyNzM1NDkzOTk5MzksImFuZ2xlIjowLCJjSWQiOjV9LHsibGVmdCI6NDc2LjQ4NTUyNjQ2MDQ5OTU2LCJ0b3AiOjUxNi42NjU2NTUyNzI5MSwid2lkdGgiOjEzNC40MzQ1MTUwMDAxMzgwNSwiaGVpZ2h0Ijo1MS43Nzk2NjAyMDAwNTE0NywiYW5nbGUiOjAsImNJZCI6Mn0seyJsZWZ0Ijo3OTUuODU2NzMwODU0NTY1NiwidG9wIjoxMzUuNjE0NDIxMjgxNjY2ODYsIndpZHRoIjoxNTUuNjQ4MDYwNDk5MTg2MzksImhlaWdodCI6NjkuMzMzNTA3MjI2MzI1MiwiYW5nbGUiOjAsImNJZCI6M30seyJsZWZ0Ijo1ODEuNzEzNzUzODYzODIxOSwidG9wIjo1MTQuMDExODM4MzkxMzAwOSwid2lkdGgiOjY2LjQ2ODU1MDMyMzY3OTc4LCJoZWlnaHQiOjQ5LjU5MTgzODA0NzYwMzIzLCJhbmdsZSI6MCwiY0lkIjo0fSx7ImxlZnQiOjMwNy4zNzU3NTA1OTQxOTE5LCJ0b3AiOjQzOS45ODU2NzIyMjU1NTMsIndpZHRoIjo4MC4xODAyNjA1ODQ2OTQ5NSwiaGVpZ2h0Ijo1NS4yMzA1MDc5ODE0MzQwNywiYW5nbGUiOjAsImNJZCI6Nn0seyJsZWZ0Ijo0NTguMTE3ODI1NzAyNjgwOTMsInRvcCI6NDUyLjQyNTUwMDc4ODk2NTgsIndpZHRoIjo1MS4xNzc5MjQ4MjcxOTY5OSwiaGVpZ2h0Ijo0Ny44NDAyNDc5OTExNjM4MzUsImFuZ2xlIjowLCJjSWQiOjd9LHsibGVmdCI6NTk1LjIzNDc3NTY4MTMwMzYsInRvcCI6NDQ0Ljg2NzUyNjAzMjg4MzgsIndpZHRoIjo1NC40MjU1MDU2NDk3ODg4NywiaGVpZ2h0Ijo0Ny45NjUyODU2NzE5OTQ3MSwiYW5nbGUiOjAsImNJZCI6OH0seyJsZWZ0Ijo2NjMuOTgyNTIzMzQzNzE2NSwidG9wIjo0NzEuNzA1MDM3MzM3MTMyODYsIndpZHRoIjo2Ni45MTk5OTk5MzU2ODU4NCwiaGVpZ2h0IjozNi43NjQ1MTMyNTIyNzM3OSwiYW5nbGUiOjAsImNJZCI6OX0seyJsZWZ0IjoxNDM0LjY2MTY5OTgzOTU4MDcsInRvcCI6NDMxLjg4MjY3Mjk4MDY2MTgsIndpZHRoIjo1MTAuNDI5MTc2MTI1ODU3MSwiaGVpZ2h0Ijo1ODEuMTI3NTA4NzM2NTQyOCwiYW5nbGUiOjAsImNJZCI6M31dfX0=
    使用饱和的非线性函数

  • 为什么 :-> 在输入达到一定值后,输出就不会发生明显变化

  • [[sigmoid]] 阈值 0-1 :-> 模拟开关的关闭程度,用于各种门

    • 现代神经网络中门控的选择
  • [[Tanh]] 阈值 -1 到 1,梯度的阈值为 0~1 :-> 生成记忆

    • 0 中心

    • 输入在 0 附近相比 Sigmoid 函数有更大的梯度

  • 为什么不使用 relu :-> 只能输出大于 0 的部分,前向传播容易发生信息爆炸性增长。

Ref


Lesson 7B - The Curate Session - Source Curation

链接:7B The Curate Session Source Curation (youtube.com)

想法

  • 快速判断需不需要读一份资料,和你当前研究的主题有没有关系?

Goals #card

  • Problem:

    • You are spending hours reading and when you get to the end you realize you have maybe one relevant note, or the book you just spent time reading wasn’t relevant at all.

      • 你花了几个小时阅读,当读到结尾时,你才意识到可能只记下了一条相关的笔记,或者发现刚读完的书根本不相关。
    • You’ve got hundreds of sources in your Zotero and you have no idea how you will get through them all.

      • 你在 Zotero 中有数百个来源,却不知道如何全部处理。
  • Solution: When in doubt… curate.

Source Curation

  • And Page Title on DNP, 开始一个番茄钟完成整理。

  • 导入 Book

    • Review the TOC

    • Check Index

    • Read the publisher blurb

    • Find pivotal chapters

    • Read Chapter first paragrphs

    • Dip In

  • 导入论文

    • Read the abstract

    • Read the conclusion

    • Read the introduction

    • Dip In

  • Structural Notes

    • Why am I reading?

    • What is the main point of this? What is it about?

    • What is the specific question?

    • What are the results/findings

    • Does this relate to something else I have read? Or a topic/section of my outline? - Add keywords to tags section

    • Dip In Thoughts:

    • Status: Source Review or Source Complete

In Summary

  • The Source Curation process serves a few purposes #card
    • Guides you through a thought process to support your decision on whether to continue with the source. 引导您通过思考过程来支持您决定是否继续使用该来源。

      • If you DON’T read the source, the information gleaned means you won’t find yourself repeatedly visiting a source you have forgotten you discarded, plus it presents the solid reasons why.

        • 如果你不阅读来源,获取的信息意味着你不会反复访问一个你忘记已经抛弃的来源,并且它还提供了充分的理由。
      • If you DO read the source, the information gleaned serves as a solid jumping point for the Collection Process.

        • 如果你确实阅读了来源,获取的信息将成为收集过程的坚实起点。

Life Log

美国著名管理学家 [[Jim Collins]] 分享记笔记的方法

通过三列表格记录自己的每一天

  • 第 1 列包含一天的描述

    • 早起,2小时的创意工作,与妻子共进早餐,

    • 5小时的创意工作,锻炼,午睡,

    • 3小时的创意工作,与妻子共进晚餐,上床睡觉

  • 第 2 列那一天创造性工作的小时数

    • 过去 30 年里,每年工作超过 1000 小时

    • 每三个月,吉姆会计算他的速度,并确保在接下来的九个月里,他平均每年能达到1000个有创造力的小时。

  • 第 3 列列出一个数字记录当天的情绪

    • [-2, +2] 追踪当天整体情绪状态
  • 如何处理这些数据?

    • 他可能会检查过去5年中所有的 + 2天,看看他平均每天有多少创造性的工作时间

      • 情绪很好的日子,往往创造性时间也比较长;

      • 情绪很好的日子都“非常简单”,比如去攀岩,和真正爱的人在一起,或者完全独处。

    • 或者他会周期性地读一遍他对自己每天所做事情的描述

    • 然后,他会简单地尝试将更多关于 + 2 天的东西融入到他的生活中

  • Bug Log

    • 用第三人称的方式,你写下你在生活中遇到的情况中喜欢/不喜欢的东西,时刻牢记找到自己的 hedgehog

    • 你冷静客观地在书中做笔记,“观察那个叫[你的名字]的 bug ”

    • 举个例子,你可以这样写: The bug Jim 讨厌在会议上花时间

  • 如何实践?

    • 每天日历增加 Log 板块,按时间记录在做什么

    • 增加状态标签

[[少楠通过 flomo 写 life log]]


Life Long Learning

为什么需要持续学习?

  • [[Catastrophic Forgetting]] #card

    • 举的例子中提到模型依次学习不同任务,任务学习过后就会遗忘。将不同任务混合训练,在不同任务上都有比较好的表现。

    • [[Multi-Task Learning]] 可以解决遗忘,但是每次新增加任务都需要从头训练。

      • LLL 不希望保留之前任务的 数据

      • Life Long Learning 的 upper bound

  • 可塑性和稳定性 train a model for each task #card

    • 存储多个模型

    • 不同任务间的知识迁移

  • 和 finetune 有什么区别? [[Transfer Learning]] #card

    • 关注其他任务的学习能不能提高目标任务的表现,侧重训练后新任务表现怎么样。

    • LLL 关注训练新任务后,旧任务表现怎么样。

  • [[不同学习场景对比]]

分类

  • 任务增量型持续学习(Task-Incremental CL)

  • 类增量型持续学习(Class-Incremental CL)

  • 域增量型CL(Domain-Incremental CL)

  • 任务不可知型持续学习(Task-Agnostic CL)

    • 模型在测试过程中可能会应对任意位置的任务

    • 需要模型学到的特征能够容易地泛化到任意新场景

如何评估效果?

  • a sequence of task

  • Ri,jR_{i,j}: 训练 task i 后 task j 的效果

    • i > j j 是否被遗忘?

    • i < j 任务 i 能否被迁移到任务 j

  • 指标

    • Accuracy =1Ti=1TRT,i=\frac{1}{T} \sum_{i=1}^{T} R_{T, i}

    • Backward Transfer =1T1i=1T1RT,iRi,i=\frac{1}{T-1} \sum_{i=1}^{T-1} R_{T, i}-R_{i, i}

      • 评估遗忘程度(下降程度)

      • 一般结果小于 0

    • Forward Transfer =1T1i=2TRi1,iR0,i=\frac{1}{T-1} \sum_{i=2}^{T} R_{i-1, i}-R_{0, i}

为什么会发生 [[Catastrophic Forgetting]] #card

  • 不同任务损失最小的参数空间可能不同

解决方法

  • Selective Synaptic Plasticity

    • Regularization-based Approach

    • 思路:保留模型先前学习到的重要参数,只改变不重要的参数学习新任务。

    • L(θ)=L(θ)+λibi(θiθib)2L^{\prime}(\boldsymbol{\theta})=L(\boldsymbol{\theta})+\lambda \sum_{i} b_{i}\left(\theta_{i}-\theta_{i}^{b}\right)^{2}

      • θib\theta ^b_i 之前学习到的参数

      • bib_i 评估 θib\theta ^b_i 对前面模型的重要性

        • bi=0b_i = 0 会出现 [[Catastrophic Forgetting]]

        • bi 过大会出现新任务学习不好 intransigence

        • bi 由人为设定,如果由模型学习,bi=0 后一项损失最小。

        • 如何选择?

          • 训练完模型后,如果改变某个参数对模型影响大,设置 bi 很小。反之,设置 bi 很大
      • 例子

        • SGD 代表之前的方法,学习 B 和 C 后,A 的效果明显下降。

        • L2 代表 bi=1b_i = 1,B 和 C 很难学习

+ 研究如何计算不同的 bi 值

  + Elastic Weight Consolidation (EWC)

  + [\[\[Synaptic Intelligence\]\]](/post/logseq/Synaptic%20Intelligence.html) (SI) 参数改变对损失函数的影响

  + Memory Aware Synapses (MAS) 参数改变对模型输出的影响

  + RWalk

  + Sliced Cramer Preservation (SCP)

+ gradient episodic memory

  + 对梯度更新方向做出限制

    + task 1 和 task 2 的梯度做点积大于 0,让两个任务的梯度更新方向尽可能相同。

  + 需要记录过去 task 的梯度信息 (远小于过去task的数据量)
  • Additional Neural Resource Allocation

    • 增加额外神经元资源分配

    • progressive neural networks

  + 不动已经训练好的模型参数,将它做为下一个模型某些层的输入,再增加模型学习新任务的参数。

+ PackNet

  + 不增加神经元数量,每个任务只使用部分模型参数

+ Compacting, Picking, and Growing (CPG)

  + 上面两种方法结合
  • Memory Reply

    • Generating Data

      • 生成器生成之前任务的 pseudo-data 加到新任务数据中,然后一起训练。

[[Life Long Learning/tree]]

Ref


Lesson 8C - The Building BLOCKS (Pt 3)

Block to Page Connections

  • On Page 页面上三种链接方式

    • A Block is referenced and becomes part of a paragraph in an Output Page 一个区块被引用并成为输出页面中段落的一部分 #card

      • Example: This Block only appears ON the page in a Summary/Detail or Output Page. This is an example of a block like this. Because it is an example, it serves an important purpose to this page.
    • A journal response Block on your DNP #card
      image.png

    • A Block is a note from a specific source and it lives on your Source Page #card
      image.png

    • Nested under Page Backlink - Links Block and Page as a Linked Reference to another Page (Important) 嵌套在页面反向链接 - 链接块和作为另一个页面的链接引用(重要) #card

      • You are taking notes on a new source on your DNP and you nest notes underneath a source page link so you can relate your notes to the date. You will move important Blocks to On Page Blocks later

      • You are synthesizing Blocks on a Source Page and you realize you’d like to see many of them when reviewing a particular topic. You nest under a Topic Page Backlink

    • Page mentions (no double bracket)- Links Block as an Unlinked Reference (Not Important) 页面提到(无双括号)- 链接块作为未链接的引用(不重要)

    • 读书笔记:关于小说创作的结构关键点

概要(Executive Summary):书中提到的每个情节都遵循一种特定的结构,复制这种结构即可能写出成功的故事。最初这种方法来源于电影,现在被应用到小说中。

  + 

第1章

    + 建议从角色缺陷开始,因为每个伟大的故事都有一个有缺陷的角色。

    + 提到“灵魂的黑暗之夜”是小说中的一个关键点,反映角色如何应对逆境并最终突破,通常在故事的75%-80%处。这是一个角色思考和制定解决方案的时刻。

image.png

+ 

Block to Block Connections #card

  • Nesting (Very Important)

    • Relationships

    • Thought Process

  • Tagging (Important)

  • Serendipity (Less Important, but extremely powerful)


Life Long Learning/tree

[[XGBoost]] 支持两种方式

  • 把原来的模型作为新的训练的初始模型

    • 无法解决在新数据上训练后对老数据的遗忘问题

    • tests/python/test_training_continuation.py

  • process_type: update

    • refresh

    • prune

  • 当前迭代树的基础上增加新树,原树不变

  • 当前迭代树结构不变,重新计算叶节点权重,同时也可增加新树

[[LightGBM]]

  • train 中设置参数 keep_training_booster=rueinit_model 为上一轮的结果

Ref


LightGBM

创新点

  • GOSS :-> [[Gradient-based One-Side Sampling]] 单边梯度抽样算法

  • 分裂方法 :-> [[Histogram-based Algorithm]]

  • EFB :-> [[Exclusive Feature Bundling]]
    带深度限制的 [[Leaf-wise 叶子生长策略]]

  • level-wise 生长策略不加区分对待同一层的叶子,很多叶子分裂增益较低,没有必要进行搜索和分裂。容易进行多线程优化。

  • [[Level-wise 叶子生长策略]]不加区分对待同一层的叶子,很多叶子分裂增益较低,没有必要进行搜索和分裂。容易进行多线程优化。

  • 每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环

    • 分裂次数相同的情况下,leaf-wise 可以降低更多误差,得到更好的精度。

    • 通过树最大生长深度,避免过度拟合

类别特征最优分割

  • 时间复杂度 :-> O(klog(k))O(k\log(k))

  • 每一次切分尽可能分成两个数量接近的集合

  • 具体实现

    • [[目标编码]] 枚举分割点前,直方图按每个类别的label均值进行排序,然后按均值的结果依次枚举最优分割点
      • 需要大量的约束和正则化解决过拟合问题

并行

  • 特征并行 :-> 每台机器保存所有训练数据,找到最佳划分方案后,本地执行重分区。避免[[XGBoost]]中不同机器同步划分方案。

  • 数据并行 :-> Reduce scatter 把直方图合并的任务分摊到不同机器,利用 直方图做差加速

  • 投票并行

    • Parallel Voting Decision Tree, PV-tree

缓存优化

  • xgb pre-sorted算法导致 Cache-miss 问题

[[Ref]]


LightGBM/Code

源码

  • [[LightGBM/training]]

    • 加强拟合

      • 增大 max bin

      • 小 learning rate 和大 num iterations

      • 大 num leaves

      • 大训练集

      • dart

    • 减少拟合

      • 小 max bin

      • 小 num leaves

  • 损失函数

    • MAPE

      • hessians 设置为 1
    • MAE

      • hessians 设置为 1
    • WeightedPercentileFun


LightGBM/Question

id:: 63137188-e688-40b0-82ea-1623abcdf2fe

[[Exclusive Feature Bundling]] 中如何确定绑定特征的特征值? #card

  • 模型可以通过值的范围来辨别不同特征

  • histogram-based 算法会将连续值保存为离散的 bins,将不同特征的值分到 buddle中不同的 bin 中。如果原始值存在相同,可以通过增加偏移量来解决。

分裂方法 :-> [[Histogram-based Algorithm]]
的优点有那些? #card

  • 减少特征排序后位置索引的内存占用

  • 减少预排序计算量,从 #data* #features#k* #features

对比 LightGBM 和 XGBoost 的分裂策略区别?

  • XGBoost :-> level-wise 分裂策略
    • 缺点 :-> 对每一层所有节点做无差别分裂,可能有些节点增益非常小,对结果影响不大,但是 xgb 也进行分裂,带来无必要的开销。
  • LightGBM :-> leaf-wise 分裂策略
    • 缺点? :-> 在当前所有叶子节点选择分裂收益最大的节点进行分裂,一直递归,容易过拟合。
      类别特征最优分割
      的原理是什么? #card
  • 每一次切分尽可能分成两个数量接近的集合

类别特征最优分割
如何实现? #card

  • [[目标编码]] 枚举分割点前,直方图按每个类别的label均值进行排序,然后按均值的结果依次枚举最优分割点

histogram 算法相对于 exact 算法有什么内存优势?

  • 排序后对梯度是顺序访问,可以进行 cache 优化

  • 直方图算法的内存消耗 :-> ( #data* #features * 1Bytes )

    • 不需要额外存储排序的结果,可以只保存特征离散化后的值。一般用 8 位整型存储。
  • xgboost 的 exact 算法内存消耗为 :-> (2 * #data * #features* 4Bytes)

    • 既要保存原始feature的值,也要保存这个值的顺序索引,这些值需要32位的浮点数来保存。

[[Histogram-based Algorithm]] 在 选择好分裂特征后,计算分裂收益时 相比于 exact 算法有计算优势

  • 预排序算法需要 遍历所有样本的特征值 ,时间为 #data

  • [[Histogram-based Algorithm]] 需要 遍历分桶桶 ,时间为 #bin
    lgb 相对于 xgb 有什么改进 #card

  • 内存需求小,xgb pre-sorted 决策树,lgb 基于 histogram 的决策树算法

  • 计算速度快,决策树算法主要包括寻找分割点与数据分割两步。pre-sorted 算法和 histogram 算法在寻找分割点上的时间复杂度是一致的。histogram 所有特征共享一张索引,pre-sorted 一个特征对应一张索引。histogram 随机访问性能好。

  • 通信代价小,适用于分布式计算


Log-Normal Distribution

一个随机变量的对数服从 [[正态分布]],则该随机变量服从对数正态分布。

  • 对于一条路线的 ETA 来说,有一个无人可及的最小时间,然后是少数一些非常快的司机,接下来是普通司机最具代表性的完成时间形成一个高峰,最后是尾部一长串的“掉队者”。

ln(Y)N(μ,σ2)\ln (Y) \sim N\left(\mu, \sigma^2\right)

[[概率密度函数]]

  • flgN(x;μ,σ)=1xσ2πe(lnxμ)22σ2f_{\lg -N}(x ; \mu, \sigma)=\frac{1}{x \sigma \sqrt{2 \pi}} e^{-\frac{(\ln x-\mu)^2}{2 \sigma^2}}

期望

  • E(x)=eμ+σ22E(x)=e^{\mu+\frac{\sigma^2}{2}}

方差

  • D(X)=(eσ21)e2μ+σ2D(X)=\left(e^{\sigma^2}-1\right) e^{2 \mu+\sigma^2}

Logistic Regression

逻辑回归,能融合多种特征。

y=f(Wx+b),y{0,1},fy=f(W^x+b), y \in \{0, 1\}, f 是 link function
线性分类

  • 硬分类 :<-> 直接输出输出对应的分类 y{0,1}y \in \{0, 1\}

    • 线性判别分析[[Fisher]]

    • [[感知机]]

  • 软分类 :<-> 产生不同类别的概率 y[0,1]y \in [0, 1]

    • 概率生成式(连续),类别先验 [[Gaussian Discriminant Analysis]] GDA [[Naive Bayes Classifier]]

      • P(y=0x),P(y=1x)P(y=0|x), P(y=1|x) 的大小关系
    • 概率判别式(离散) Logisitic Regression

      • 直接对 $$P(Y|X)$$ 建模

逻辑回归

  • P(Y|X, \theta)=p_1^yp_0^{1-y}$$ 服从[\[\[Bernoulli Distribution\]\]](/post/logseq/Bernoulli%20Distribution.html) + 求 MLE 转化成 Cross Entropy

  • 取 $$z=\ln \frac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2}$$

    • 激活函数 [[sigmoid]] f(z)=11+exp(z)(0,1.0)f(z)=\frac{1}{1+exp(-z)} \in (0, 1.0)

      • 阶跃函数不连续,sigmoid函数光滑,处处可导

      • 数据取值范围从正无穷压缩到 0-1

    • 两类联合概率比值的对数

    • odds 几率代表事件发生和不发生的比值 $$\frac{p}{1-p}$$

    • 对数几率的线性回归

  • P(y=0x)=11+exp(wTx)P(y=0|x)=\frac{1}{1+\exp(-w^Tx)}

  • P(y=1x)=exp(wTx)1+exp(wTx)P(y=1|x)=\frac{\exp(-w^Tx)}{1+\exp(-w^Tx)}

  • MLE $$w=\mathop{argmax} \sum(y_i \log p_1 + (1-y_i)\log p_0)=\mathop{argmax} \sum(y_i \log f(x,w) + (1-y_i)\log (1-f(x,w))$$

    • 等价于 Cross Entropy
  • 多分类

    • softmax regression

    • 参数冗余

  • 多标签:每个标签设计一个分类器

在推荐系统中,LR 当成是一个分类问题处理,通过预测正样本的概率对物品进行排序。将推荐问题转化为预估问题。另外也能使用 [[Pair Wise]]

优点

  • 数学含义:用户是否点击广告是一个经典的掷偏心硬币问题,显然符合伯努利分布

  • 可解释性强

  • 工程化较为简单

[[面试]]

  • LR归一化问题

    • 什么情况可以不归一化 :-> 最小二乘法
    • 什么情况必须归一化 :-> 梯度下降算法
    • [[Wide&Deep]]
  • 提到LR损失函数要能知道交叉熵,为什么是它,以它为损失函数在优化的是一个什么东西,知道它和KL散度以及相对熵的关系

  • 提到LR的求解方法,比如SGD,知道SGD和BGD的区别,知道不同的GD方法有什么区别和联系,二阶优化算法知道什么,对比offline learning和online learning的区别

  • 提到调参,知道模型不同超参数的含义,以及给定一个特定情况,大概要调整哪些参数,怎么调整

  • 提到LR的正则,知道l1l2的原理,几何解释和概率解释

  • LR的分布式实现逻辑是怎么样的,数据并行和模型并行的区别,P-S架构大概是怎么一回事

  • LR作为一个线性模型,如何拟合非线性情况?

    • 特征侧比如离散化,交叉组合,模型比如引入kernel,又可以推广到FM等model上
  • LR 如何解决低维不可分

    • 通过核函数将特征从低维空间转换到高维空间,高维空间中线性可分的几率会变高

Loss Function

MSE/MAE/ [[Huber Loss]]

  • 假设误差服从某种特定分布,然后通过 MLE 推导最终 loss 形式。

  • MSE 反向传播梯度 (y(i)θTx(i))x(i)-\left(y^{(i)}-\theta^T x^{(i)}\right) x^{(i)}

    • MSE 梯度容易受到异常值影响。异常样本 label 非常大时,y(i)θTx(i)y^{(i)}-\theta^T x^{(i)} 的值也会非常大,将模型带偏。

      • 反过来离群点会影响业务时,应该使用 MSE。
  • MAE 反向传播梯度 y(i)θTx(i)y(i)θTx(i)x(i)-\frac{y^{(i)}-\theta^T x^{(i)}}{\left|y^{(i)}-\theta^T x^{(i)}\right|} x^{(i)}

    • 使用 MAE 损失时,梯度始终相同。在接近最小值的时候减少学习率。
  • MSE 和 MAE (L2 损失和 L1 损失)

      1. 平方差更容易求解,绝对误差对离群点更加鲁棒。
      1. pb 如果只预测一个值,最小化 MSE 倾向于均值,最小化 MAE 倾向于中位数。对于异常点,中位数比平均值更鲁棒。(简单可以证明)

[[ZILN]] [[Log-Normal Distribution]]

  • LTV 分布,首次购买后产生的价值,0 代表只购买一次

  • LZILN(x;p,μ,σ)=1x=0log(1p)1x>0(logpLLognormal (x;μ,σ))L_{Z I L N}(x ; p, \mu, \sigma)=-\mathbf{1}_{x=0} \log (1-p)-\mathbf{1}_{x>0}\left(\log p-L_{\text {Lognormal }}(x ; \mu, \sigma)\right)

    • x 是 label

    • p 预估购买概率

    • 预估金额 LLognormal (x;μ,σ)=log(xσ2π)+(logxμ)22σ2L_{\text {Lognormal }}(x ; \mu, \sigma)=\log (x \sigma \sqrt{2 \pi})+\frac{(\log x-\mu)^2}{2 \sigma^2}

    • 网络结构

[[Weighted Logistics Regression]] 预估用户观看时长

  • 出处 [[@Deep Neural Networks for YouTube Recommendations]]

  • [[Cross Entropy Loss]] 正样本以时长为权重,负样本权重为 1。模型能学习到观看视频的时间
    ,reweight 后,改变正负样本的比例。

    • cross entropy 最终预估的概率是正样本的比例。
  • label 为 T 的样本,相当于在分类任务重变为 T 个正样本。正样本总体比例变成 i=1kTiN+i=1kTik\frac{\sum_{i=1}^k T_i}{N+\sum_{i=1}^k T_i-k}

    • N 总样本,k 正样本,Ti 每个样本时长
  • LR 可以写成

    • 11+elogit =i=1kTiN+i=1kTik=PN+P\frac{1}{1+e^{- \text {logit }}}=\frac{\sum_{i=1}^k T_i}{N+\sum_{i=1}^k T_i-k}=\frac{P}{N+P}

    • PN=elogit \frac{P}{N}=e^{\text {logit }}

    • 上面推导如果不忽略 k

      • label为 T 的样本,把它当做 T 个正样本和一个负样本,为每个正样本多增加一个负样本。

      • 11+elogit=i=1kTiN+i=1kTik+k\frac{1}{1+e^{-\operatorname{logit}}}=\frac{\sum_{i=1}^k T_i}{N+\sum_{i=1}^k T_i-k+k}

  • reweight 之后相当于假设 label 服从参数为 p 的几何分布(失败概率),label T就是几何分布的 pdf 取 log 后提到前面的值,表示连续失败 T 次。

[[Bucketing with Softmax]] 对 label 的值域进行分桶,根据每个样本的 label 把样本分到某个桶里。回归任务转成多分类问题,使用 softmax 损失函数训练。

  • 线上预测时,用 softmax 预估的概率分布对每个桶做加权求和。

    • pred =i=1npivi=\sum_{i=1}^n p_i v_i
  • 如何确定分桶数量和每个桶大小?

    • 目标让每个分桶的样本均衡
  • 优化

    • 每个桶再套上 mse 等损失转化成分区间的 multi-task 建模
  • 分桶之后会丢失 laebl 之间的大小关系(label=50 分到 [0,10] 或 [51,100] 的损失没有区分性)。引入[[Label Smooth]]

    • 对 label 做变换时,不用 one-hot 而是转化成高斯分布等形式

[[ETA]]

  • 均值和中位数哪个大?均值大?

  • 对于 badcase 来说,哪个模型效果更好?

  • MSE 对异常值更加

  • MAPE 没有上界,对异常值敏感,训练出来的模型倾向于低估。(高估带来较大的惩罚)

  • SMAPE 有界(0-200),高估和低估的上界都是 200 。

Ref


Mac/重置隐私设置

问题

  • 钉钉提示没有麦克风权限,然后在系统设置页面相关选项下没有钉钉可以添加。

  • 重置相关设置,重启钉钉,发起会议,触发请求权限的弹窗。

重制 mac 上麦克风、摄像头、屏幕录制的权限

1
2
3
sudo tccutil reset Microphone
sudo tccutil reset Camera
sudo tccutil reset ScreenCapture

Manacher Algorithm

将在原串中加入特殊字符,比如#组成一个新的字符串,这样可以把所有奇数或偶数的字符串都变成奇数长度的字符串. 例如abba可以转化成$#a#b#b#a

用一个辅助数组P[i],代表以S[i]为中心的最长回文串向左或向右扩展的长度.最后max(P[i]-1)为最长回文串的长度

  • 当 mx - i > P[j] 的时候,以S[j]为中心的回文子串包含在以S[id]为中心的回文子串中,由于 i 和 j 对称,以S[i]为中心的回文子串必然包含在以S[id]为中心的回文子串中,所以必有 P[i] = P[j],见下图。


当 P[j] > mx - i 的时候,以S[j]为中心的回文子串不完全包含于以S[id]为中心的回文子串中,但是基于对称性可知,下图中两个绿框所包围的部分是相同的,也就是说以S[i]为中心的回文子串,其向右至少会扩张到mx的位置,也就是说 P[i] >= mx - i。至于mx之后的部分是否对称,就只能一个一个匹配了。

  • 对于 mx <= i 的情况,无法对 P[i]做更多的假设,只能P[i] = 1,然后再去匹配了

Mathematics

[[博弈论]]

  • [[纳什均衡]]

[[微积分]]

  • 极限

  • 导数

  • [[泰勒公式]] 用 多项式来近似 表示 函数在某点周围的情况

  • [[偏导数]]

  • 偏导数

  • 梯度

  • 链式法则

  • [[Jacobian 矩阵]] 以及 [[Hessian 矩阵]]

  • 向量与矩阵求导

[[线性代数]]

  • [[特征值]]与特征向量

  • 奇异值分解 [[SVD]]

  • [[迹]]

[[统计学]]

[[概率论]]

优化

  • [[对偶问题]]

See Also

  • [[Mathematics/Ref]]

Master How To Learn

链接: 新 All Posts - Master How To Learn旧 Posts – Master How To Learn

[[Incremental Reading]] 相关资料

Why I Switched to SuperMemo After Using Anki for 5 Years, With Over 50k Cards and 420k Total Reviews - Master How To Learn 资深 Anki 用户讲述为什么逃离到 Supermemo,部分内容比较专业,不适合新人。

  • two nagging reasons

    • Burning out in Anki

    • Believing in the superiority of the SM-17 algorithm

  • two final push reasons

    • Frustration with Transfer of Knowledge in Anki

    • Realizing the benefits of Incremental Reading

  • burning out in anki

    • high review count

    • Frustrated with the Anki Settings

      • Anki parameters and settings: Steps, Graduating Interval, Easy Interval, Starting Ease, Easy bonus, Interval Modifier, Steps and New Interval for lapses.

Meta-Learner

T/S/X-Learner [[@Meta-learners for Estimating Heterogeneous Treatment Effects using Machine Learning]]

  • 适用情形:#card

    • 随机干预实验的数据,对于非随机的观测数据,可以结合下文的表示学习,实际上很多表示学习的模型框架就是以 T-Learner 为基础。T/S/X-Learner 本质上也是利用相似单元的事实结果进行反事实估计,只不过是把相似单元的事实结果编码进模型参数里了。
  • [[S-Learner]]

  • [[T-Learner]]

  • [[S-Learner vs T-Learner]]

  • [[X-Learner]]

[[R-Learner]]


MoCo

Summary

  • 填补 CV 领域有监督学习和无监督学习的差距

Abstract

  • dictionary look-up

    • 提出基于队列+动量对比用于无监督的表征学习。

Introduction

  • 创新点:用队列表示字典

    • 什么样的字典才适合对比学习?

      • (i) large

        • 从连续高维空间做更多的采样,字典 key 越多,表示的信息越丰富

        • 字典小,key 少,模型泛化能力弱

      • (ii) consistent

        • 字典中的 key 应该用相同或相似的编码器生成

        • 如果key是使用不同编码器得到的,查询时可能找到与 query 使用相同或相似编码器生成的key,而不是语义上相似的 key

  • 无监督在 CV 领域不成功的原因

    • 原始信号空间的不同

    • NLP 原始信号是离散的,词、词根、词缀,容易构建 tokenized dictionaries 做无监督学习

      • tokenized: 把一个词对应成某一个特征

      • Why tokenized dictionaries 有助于无监督学习?

      • 把字典的 key 认为是一个类别,有类似标签的信息帮助学习

      • NLP 无监督学习很容易建模,建好的模型也好优化

    • CV 原始信号是连续的、高维的,不像单词具有浓缩好的、简洁的语义信息,不适合构建一个字典

    • 如果没有字典,无监督学习很难建模

  • 无监督学习主要的两个部分:

    • pretext tasks 代理任务

      • 学习更好的特征表示

      • 常见代理任务

        • denoising auto-encoders 重建整张图

        • context auto-encoders 重建某个 patch

        • cross-channel auto-encoders (colorization) 给图片上色当自监督信号

        • pseudo-labels 图片生成伪标签

        • exemplar image 给同一张图片做不同的数据增广,它们都属于同一个类。

        • patch ordering 九宫格方法:打乱了以后预测 patch 的顺序, or 随机选一个 patch 预测方位 eight positions

        • 利用视频的顺序做 tracking

        • 做聚类的方法 clustering features

    • loss functions

      • 衡量模型预测结果和固定目标的差异

      • L1 or L2 Loss

        • Auto-encoder
      • 判别式网络

        • eight position

          • 图片 9 等分,判断选出的图片位于中间图片的什么方向。
      • 对比学习损失:目标不固定,训练过程中不断改变

      • 对抗学习损失:衡量两个概率分布之间的差异

Method

  • 代理任务 instance discrimination 个体判别

+ 一张图片 $$x_{i}$$ 经过翻转+裁剪等方法得到 $$x_{i1}$$ 和 $$x_{i2}$$,这两张图片做为正样本,其他图片做为负样本。

+ $$x_{i1}$$ 是  anchor

+ $$x_{i2}$$ 是 positive

+ 编码器 E11 和 E12 可以相同,也可以不同。

+ 对比学习怎么做?

  + f11 和 f12 接近,和其他样本远离

    + matching key and dissimilar to others

    + Learning is formulated as minimizing a contrastive loss

  + f11 当成是 query,在字典中查询接近的 key
  • 如何构建大 + 一致的字典

    • 基于队列的字典

      • 摆脱 batch size 的限制

      • 用队列大小限制字典大小

    • 基于动量的编码器

      • θkmθk+(1m)θq\theta_{\mathrm{k}} \leftarrow m \theta_{\mathrm{k}}+(1-m) \theta_{\mathrm{q}}

      • momentum encoder 由当前的编码器初始化得到

      • 动量 m=0.999 比较大是,动量编码器更新缓慢。尽可能保证队列的 key 由相似的编码器生成

  • 和之前方法对比

    • end-to-end 牺牲大

      • 负样本大小等于 batch size 大小
    • memory-bank 牺牲一致性

      • 采样得到负样本
    • moco

      • encoder 基于梯度更新

      • momentum encoder 基于 encoder 进行动量更新

  • 目标函数 [[InfoNCE]]

    • Lq=logexp(qk+/τ)i=0Kexp(qki/τ)\mathcal{L}_{q}=-\log \frac{\exp \left(q \cdot k_{+} / \tau\right)}{\sum_{i=0}^{K} \exp \left(q \cdot k_{i} / \tau\right)}

    • 计算 q 和 k 的点积判断两个样本之间的相似度

    • \tau$$ 控制分布图形,越大越关注困难样本

Experiments

  • 7 个检测 + 分割任务

  • linear protocol

    • 预训练模型,应用时只改变最后的全连接层。

    • backbone 做为特征提取器

    • 对比预训练的效果好不好

Conclusion

  • 1000 倍数据增加,moco 性能提升不高

  • 尝试NLP中其他代理任务 masked auto-encoding

    • [[Masked-Language Modeling]]

    • 见 [[Masked Autoencoders Are Scalable Vision Learners]]

  • 总结

    • 去构造一个大的字典,从而让正负样本能够更有效地去对比,提供一个稳定的自监督信号,最后去训练这个模型

Moonlander

官方提供[[轴体]]

  • Clicky 清脆手感

    • [[Kailh Bronze]](Thick Gold) 50g 茶轴

    • [[Kailh Gold]] 60g

    • Kailh Box White 45g 白

      • 用一根单独的发声扭簧,同时提供段落感和声音
  • Linear 线性手感,没有明确的物理回馈感,可能增加误触机率

    • [[Kailh Silver]] 40g,提前触发

    • Kailh Box Red 45g

    • Kailh Box Black 60g

  • Tactile 段落轴,有按键确认感,弹性手感

    • [[Kailh Copper]] 40g

    • Kailh Box Brown 50+15 茶轴

Tent Kit 支架

Zip Kit

  • Key covers 盖在键位上,将键盘变成更小的布局。

image.png

image.png

Ref


Multi-Head Attention

DONE BERT 可解释性-从"头"说起 - 知乎 [[BERT]],不停的 mask 结构,判断对指标的影响。[[2021/06/16]]

  • 任务:query-title

    • 按 query-doc 相关程度分成 5 类

    • 用 BERT 做多分类

  • 研究各个头对模型的影响:通过将 attention = 0 来 mask 对应的头

    • 12 层,每层 12 个 head,共 144 个 head
  • 结论

    • attention-head 很冗余/鲁棒,去掉 20%的 head 模型不受影响

      • 144 个 head 随机 mask

      • 分成 0-5 层、6-11 层 mask

        • 底层特征对分类比较重要
    • 各层 transformer 之间不是串行关系,去掉一整层 attention-head 对下层影响不大

    • 各个 head 有固定的功能

      • 某些 head 负责分词

      • 某些 head 提取语序关系

      • 某些 head 负责提取 query-title 之间 term 匹配关系

[[香侬科技@为什么Transformer 需要进行 Multi-head Attention?]]

  • 借鉴了CNN中同一卷积层内使用多个卷积核的思想

  • Transformer,或Bert的特定层是有独特的功能的,底层更偏向于关注语法,顶层更偏向于关注语义。

  • 多头中多数的关注模式是一致的

    • 不同的关注模式由初始化带来
  • 就是希望每个注意力头,只关注最终输出序列中一个子空间,互相独立。其核心思想在于,抽取到更加丰富的特征信息。

利用多组 $$W$$ 值和 $$X$$ 相乘,得到多组不同的 $$Q$$ $$K$$ $$V$$,分别利用这几组向量去做 self-attenttion,最终将得到的 attention 结果 concat 在一起。

 MultiHead (Q,K,V)= Concat ( head 1,, head h)WO where head i=Attention(QWiQ,KWiK,VWiV)\begin{aligned} \text { MultiHead }(Q, K, V) &=\text { Concat }\left(\text { head }_{1}, \ldots, \text { head }_{\mathrm{h}}\right) W^{O} \\ \text { where head }_{\mathrm{i}} &=\operatorname{Attention}\left(Q W_{i}^{Q}, K W_{i}^{K}, V W_{i}^{V}\right) \end{aligned}

WiQRd model ×dk,WiKRd model ×dk,WiVRd model ×dvW_{i}^{Q} \in \mathbb{R}^{d_{\text { model }} \times d_{k}}, W_{i}^{K} \in \mathbb{R}^{d_{\text { model }} \times d_{k}}, W_{i}^{V} \in \mathbb{R}^{d_{\text { model }} \times d_{v}}

论文中每一层有 h=8 个 attention

输入的向量大小为 512,为了保持大小相同,每个 attention 中的 $$d_k=d_v=d_{model}/h=64$$

从原理上来看,multi-head 相当于在计算次数不变的情况下,将整个 attention 空间拆成多个 attention 子空间,引入了跟多的非线性从而增强模型的表达能力。

论文中一共使用了三种 multi-head attention

  • encoder-decoder attention:query 来自前一个 decoder 层的输出,keys,values 来自最后一个 encoder 输出。

    • 其意义是: decoder 的每个位置去查询它与 encoder 的哪些位置相关,并用 encoder 的这些位置的 value 来表示。
  • encoder self-attention:query,key,value 都来自前一层 encoder 的输出。这允许 encoder 的每个位置关注 encoder 前一层的所有位置。

  • decoder masked self-attention:query,key,value 都来自前一层 decoder 的输出。这允许 decoder 的每个位置关注 encoder 前一层的、在该位置之前的所有位置。

  • 第一种 QVV 模式,后面两种 VVV 模式


Multi-Task Learning

基本网络框架 [[底层共享法]]
image.png
occlusion:: eyIuLi9hc3NldHMvaW1hZ2VfMTczNjE3NTMyNDk1N18wLnBuZyI6eyJjb25maWciOnt9LCJlbGVtZW50cyI6W3sibGVmdCI6MjY3Ljk5MzU1MDM0NDkxNjksInRvcCI6NjAyLjM4MzAxMDkzMDM5MjIsIndpZHRoIjozNDEuMTMyNDgzNDEzNjAxLCJoZWlnaHQiOjg3LjIzMzk3ODEzOTIxNTc2LCJhbmdsZSI6MCwiY0lkIjoxfSx7ImxlZnQiOjEyODcuMTM3ODQyNzI5Nzg5LCJ0b3AiOjYwMy44MTA5NTY5NDUzNjkzLCJ3aWR0aCI6Mjk5Ljk5MDY0NDI5MTI0MjIzLCJoZWlnaHQiOjg0LjM3ODA4NjEwOTI2MTI4LCJhbmdsZSI6MCwiY0lkIjoxfV19fQ==
结构

  • [[MMoE]]

  • CGC

  • ESSM

  • [[PLE]]

Optimization

  • Gradnorm

    • 考虑 Loss 量级和考虑不同任务的速度

    • Label loss 和 Gradient loss

  • Dynamic Weight Averaging

两大分支:“网络设计” 以及 “损失函数设计”

关键点

  • 任务需要有相关性

  • 任务之间可以共享低层表示

网络设计

  • TODO 参考 [[神经网络与深度学习]]

  • 网络如何小巧轻便,如何最大幅度的让不同的任务去共享信息。

  • Hard parameter sharing 底层共享参数,最上层有不同的任务。

    • Task 越多,单任务越不容易拟合

    • 底层难以学到试用于所有任务的表达,比如多任务:猫狗分类,猫汽车分类

  • Soft parameter sharing

    • 不同任务的参数空间需要添加限制,不然容易变成 single task learning
  • 层次共享

    • 图像中不同层次的表达能力不同:结构提取、语义提取
  • 共享-私有

  • Cross-Stitch Network、Multi-Attention Network、AdaShare、MTL+NAS 可以参考 “综述性质的文章Multi-task Learning and Beyond: 过去,现在与未来 - 知乎

损失函数设计

  • 如何分配不同任务损失函数的权重?

类似方向 [[Auxiliary learning]]

[[Ref]]


NFM

y^NFM(x)\hat{y}_{N F M}(\mathbf{x}) :-> w0+i=1nwixi+f(x)w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+f(\mathbf{x})

  • 第一项和第二项是线性回归

  • 引入第三项神经网络学习 :-> 数据之间的高阶特征

    • 网络输入 :-> FM 模型的二阶特征交叉结果
    • 与直接使用高阶 FM 模型相比 :-> 可以降低模型的训练复杂度,加快训练速度。
      NFM 的神经网络部分包含 4 层,分别是 Embedding Layer、Bi-Interaction Layer、Hidden Layers、Prediction Score。


tags:: #[[Model Architecture]]

Embedding Layer 层对输入的稀疏数据进行 Embedding 操作。最常见的 Embedding 操作是在一张权值表中进行 lookup ,论文中作者强调他们这一步会将 Input Feture Vector 中的值与 Embedding 向量相乘。

Bi-Interaction Layer 层是这篇论文的创新,对 embedding 之后的特征两两之间做 element-wise product,并将结果相加得到一个 k 维(Embeding 大小)向量。这一步相当于对特征的二阶交叉,与 FM 类似,这个公式也能进行化简:

  • fBI(Vx)=i=1nj=i+1nxivixjvj=12[(i=1nxivi)2i=1n(xivi)2]f_{B I}\left(\mathcal{V}_{x}\right)=\sum_{i=1}^{n} \sum_{j=i+1}^{n} x_{i} \mathbf{v}_{i} \odot x_{j} \mathbf{v}_{j} =\frac{1}{2}\left[\left(\sum_{i=1}^{n} x_{i} \mathbf{v}_{i}\right)^{2}-\sum_{i=1}^{n}\left(x_{i} \mathbf{v}_{i}\right)^{2}\right]
    Hidden Layers 层利用常规的 DNN 学习高阶特征交叉

Prdiction Layer 层输出最终的结果:

实验结果: ![](https://media.xiang578.com/15643059963915.jpg) tags:: #HOFM


Naval Ravikant

Four kinds of luck

  • The first kind of luck is ^^blind luck^^ where one just gets lucky because something completely out of their control happened. This includes fortune, fate, etc.

    • 瞎猫碰上死耗子
  • Then, there’s luck through persistence, hard work, hustle, and motion. This is when you’re running around creating opportunities. You’re generating a lot of energy, you’re doing a lot to stir things up. It’s almost like mixing a petri dish or mixing a bunch of reagents and seeing what combines. You’re just generating enough force, hustle, and energy for luck to find you.

    • 努力和勤奋,产生足够多的机会,让运气找到你。
  • A third way is you become very good at spotting luck. If you are very skilled in a field, you will notice when a lucky break happens in your field, and other people who aren’t attuned to it won’t notice. So, you become sensitive to luck.

    • 善于发现运气,发现领域中其他人看不到的运气。
  • The last kind of luck is the weirdest, hardest kind, where you build a unique character, a unique brand, a unique mindset, which causes luck to find you.

    • 独特的符号,独一无二的品牌,非你莫属。

Ref


Normalization

解决 [[Internal Covariance Shift]]

  • 本质是平滑 Loss,保持在梯度下降过程中的稳定。

连续特征的值分布不统一,会导致训练波动,影响收敛速度。
归一化:对不同特征维度的伸缩变换的目的是使各个特征维度对目标函数的影响权重是一致的,即使得那些扁平分布的数据伸缩变换成类圆形。

[[归一化方法]]

减少人为参数选择

缓解过拟合

减少梯度消失,加快收敛速度,提高训练精度

通过计算均值和方差的集合分成,输入 [N, C, H, W] 维度图片

  • 不同方法的区别在于神经元集合 S 的范围如何确定

image.png

  • [[Group Normalization]]

  • [[Batch Normalization]] 神经网络中间层进行归一化

    • C 维度上,计算 (N, H, W) 的统计量
  • [[Layer Normalization]] RNN 等序列模型

  • [[Instance Normalization]]

    • LN 相同对单个样本操作

    • IN 对同一层神经元中的同一个通道进行归一化

[[Weight Normalization]]

Ref


Obsidian/理念

Links are first-class citizens

  • The acts of the mind, wherein it exerts its power over simple ideas, are chiefly these three:

  • Hierarchy gives us No. 1, and linking gives us No. 2. We’re still unsure what No. 3 entails in the context of note-taking, but it might have something to do with programming or macros.

  • [[Ein Verne]] Obsidian 未来的笔记应用 | Verne in GitHub

    • 首先,将几个简单的想法组合成一个复杂的想法,从而完成所有复杂的思维过程;

    • 第二,是将简单或复杂的两个想法放到一起,相互设置关联,方便查看它们,而同时又不将它们融合到一起,从而可以一眼查看所有想法之间的关联。

    • 第三,是将这些想法与实际存在的所有其他思想分开:这称为抽象思维,这是所有普适思想形成的过程。

    • 笔记的层级关系 (Hierarchy) 实现了第一点,而内部链接 (linking) 正是第二点,而第三点如何在笔记中应用, Obsidian 的作者也没有想清楚,但他也说了,这可能是更高阶的抽象 —- but it might have something to do with programming or macros.


Optimization/Question

不等式约束优化问题中局部最小值的必要条件是什么?

  • μ10,μ20\mu_{1} \geq 0, \quad \mu_{2} \geq 0

  • f(x)+μ1g1(x)+μ2g2(x)=0\nabla f\left(x^{*}\right)+\mu_{1} \nabla g_{1}\left(x^{*}\right)+\mu_{2} \nabla g_{2}\left(x^{*}\right)=0

  • μ1g1(x)+μ2g2(x)=0\mu_{1} g_{1}\left(x^{*}\right)+\mu_{2} g_{2}\left(x^{*}\right)=0

是否所有的优化问题都可以转化为对偶问题? #[[incremental]]
+

为什么深度学习不用二阶优化 #card

  • 计算复杂度,二阶导数计算是平方复杂度

  • 小批量的情况下,牛顿法对与二阶导数的估计噪音太大

梯度下降找到的一定是下降最快的方法? #card

  • 梯度目标函数在当前点的切平面上函数值变化最快的方向

对所有优化问题来说,有没有可能找到比现在已知算法更好的算法? #card

  • 没有免费的午餐定理

PARA

#Workflow

Project: a series of tasks linked to a goal, with a deadline. 一系列与目标相关的任务,有明确的结束时间。

Resource: a sphere of activity with a standard to be maintained over time. 一个有明确标准的活动范围,随着时间的推移需要维持一个标准(或者状态

Area: a topic or theme of ongoing interest. 持续感兴趣的话题和主题。你的身份领域

Archives: inactive items from the other three categories. 其他三类完成的归档

Project 目标 和 Area 身份角色的区别

  • Project 有一个要实现的目标,以及结束日期

  • Area 有一个标准需要维护,持续关注

每一个项目都应该有单独的笔记、资源和你做的学习成果。

如何实践这个方法

  • 列出需要项目

  • 将项目列表复制到你现在和将来使用的每一个工具上。集中化的一致性,分散化的适应性。

原则

  • 四个类别(项目、区域、资源、档案)。避免类别太多,层级太多

  • 任务管理和项目管理系统使用统一套 PARA

  • 可操作和不可操作信息,比如每天集中注意力在你的项目上。

实践

  • 先从尝试项目管理开始,比如现在关于每一个项目的记录。

  • 慢慢演化习惯。

  • 在 Project 上在设置一层比传统的方式更加灵活

[[Ref]]


PRML/2.24

varθ[θ]=ED[varθ[θD]]+varD[Eθ[θD]]\operatorname{var}_\theta[\boldsymbol{\theta}]=\mathbb{E}_{\mathcal{D}}\left[\operatorname{var}_\theta[\boldsymbol{\theta} \mid \mathcal{D}]\right]+\operatorname{var}_{\mathcal{D}}\left[\mathbb{E}_{\boldsymbol{\theta}}[\boldsymbol{\theta} \mid \mathcal{D}]\right]
左转根据方差定义拆开

  • varθ[θ]=Eθ[θ2]Eθ2[θ]\operatorname{var}_\theta[\boldsymbol{\theta}]=\mathrm{E}_{\boldsymbol{\theta}}\left[\boldsymbol{\theta}^2\right]-\mathrm{E}_{\boldsymbol{\theta}}^2[\boldsymbol{\theta}]

要证明 ED[varθ[θD]]+varD[Eθ[θD]]=Eθ[θ2]Eθ2[θ]\mathrm{E}_D\left[\operatorname{var}_{\boldsymbol{\theta}}[\boldsymbol{\theta} \mid \boldsymbol{D}]\right]+\operatorname{var}_D\left[\mathrm{E}_{\boldsymbol{\theta}}[\boldsymbol{\theta} \mid \boldsymbol{D}]\right]=\mathrm{E}_{\boldsymbol{\theta}}\left[\boldsymbol{\theta}^2\right]-\mathrm{E}_{\boldsymbol{\theta}}^2[\boldsymbol{\theta}]

  • 左边第一项

    • ED[varθ[θD]]=varθ[θD]p(D)dD=(Eθ[θ2D]Eθ2[θD])p(D)dD=Eθ[θ2D]p(D)dDEθ2[θD]p(D)dD=θ2p(θD)dθp(D)dDED[Eθ2[θD]]=θ2p(θ)dθED[Eθ2[θD]]=Eθ[θ2]ED[Eθ2[θD]]\begin{aligned} \mathrm{E}_D\left[\operatorname{var}_\theta[\boldsymbol{\theta} \mid D]\right] & =\int \operatorname{var}_\theta[\boldsymbol{\theta} \mid D] p(D) \mathrm{d} D \\ & =\int\left(\mathrm{E}_{\boldsymbol{\theta}}\left[\boldsymbol{\theta}^2 \mid D\right]-\mathrm{E}_{\boldsymbol{\theta}}^2[\boldsymbol{\theta} \mid D]\right) p(D) \mathrm{d} D \\ & =\int \mathrm{E}_{\boldsymbol{\theta}}\left[\boldsymbol{\theta}^2 \mid D\right] p(D) \mathrm{d} D-\int \mathrm{E}_{\boldsymbol{\theta}}^2[\boldsymbol{\theta} \mid D] p(D) \mathrm{d} D \\ & =\iint \boldsymbol{\theta}^2 p(\boldsymbol{\theta} \mid D) \mathrm{d} \boldsymbol{\theta} p(D) \mathrm{d} D-\mathrm{E}_D\left[\mathrm{E}_{\boldsymbol{\theta}}^2[\boldsymbol{\theta} \mid D]\right] \\ & =\int \boldsymbol{\theta}^2 p(\boldsymbol{\theta}) \mathrm{d} \boldsymbol{\theta}-\mathrm{E}_D\left[\mathrm{E}_{\boldsymbol{\theta}}^2[\boldsymbol{\theta} \mid D]\right] \\ & =\mathrm{E}_{\boldsymbol{\theta}}\left[\boldsymbol{\theta}^2\right]-\mathrm{E}_D\left[\mathrm{E}_{\boldsymbol{\theta}}^2[\boldsymbol{\theta} \mid D]\right]\end{aligned}
  • 左边第二项

    • varD[Eθ[θD]]=ED[Eθ2[θD]]ED2[Eθ[θD]]=ED[Eθ2[θD]]Eθ2[θ]\begin{aligned} \operatorname{var}_D\left[\mathrm{E}_\theta[\boldsymbol{\theta} \mid D]\right] & =\mathrm{E}_D\left[\mathrm{E}_\theta^2[\theta \mid D]\right]-\mathrm{E}_D^2\left[\mathrm{E}_\theta[\theta \mid D]\right] \\ & =\mathrm{E}_D\left[\mathrm{E}_\theta^2[\theta \mid D]\right]-\mathrm{E}_\theta^2[\theta]\end{aligned}
  • 两项相加

    • ED[varθ[θD]]+varD[Eθ[θD]]=Eθ[θ2]Eθ2[θ]\mathrm{E}_D\left[\operatorname{var}_{\boldsymbol{\theta}}[\boldsymbol{\theta} \mid \boldsymbol{D}]\right]+\operatorname{var}_D\left[\mathrm{E}_{\boldsymbol{\theta}}[\boldsymbol{\theta} \mid \boldsymbol{D}]\right]=\mathrm{E}_{\boldsymbol{\theta}}\left[\boldsymbol{\theta}^2\right]-\mathrm{E}_{\boldsymbol{\theta}}^2[\boldsymbol{\theta}]

Parameter Server

什么是 PS ?

  • 分布式进行梯度下降的计算完成参数的更新与最终收敛

  • 和 [[Spark MLib]] 一样数据并行训练产生局部梯度,再汇总梯度更新参数权重的并行化训练方案

参数服务面临的挑战

  • 访问参数需要的大量带宽

  • 算法需要有序更新参数,不同服务器之间同步带来的时延

  • 训练容灾

PS 重要特征

  • 异步同行

  • 灵活的一致性模型

  • 弹性扩展

  • 容灾

  • 方便使用

并行梯度下降流程

  • 任务管理器

    • 分发数据到 workder
  • Worker

    • 初始化

      • 加载训练数据

      • 从 server 节点拉取参数

    • 迭代

      • 根据本节点训练数据计算梯度

      • 将计算好的梯度 push 到 servers 节点

      • pull 最新需要用到的参数

    • Servers

      • 汇总 m 个 worker 计算出的梯度成总梯度

      • 利用总梯度和正则化项梯度,计算新参数

物理架构

  • server group 管理,每个 server 维护部分参数

    • 支持自定义梯度更新方式
  • Range Push 和 Pull

    • 小批量更新参数

一致性和并行效率之间的取舍

  • 同步阻断式

    • 等 master 汇总全部梯度,重新计算模型新参数后才开始下一轮计算
  • 异步非阻断式

    • 每一轮更新没有关联
  • 最大延迟

    • 新的参数没有获取到时,使用旧的参数计算梯度

    • 指定 X 轮迭代必须等待更新参数

Vector Clock

  • 记录每个 worker 每个 range 对应的参数时间

多 server 节点的协同和效率问题

  • server group 管理,每个 server 维护部分参数

    • 通过[[一致性哈希]]计算参数位置以及分配对应的服务器

    • 服务器 S1 会计算 S1 对应的参数,也会备份之后几个 server 对应的参数

    • 增加节点相当于将 range 分裂

    • 删除节点可以让临近节点负责

  • server 在汇总多个 workder 的结果之后广播

总结

  • 用异步非阻断式的分布式梯度下降策略代替同步阻断式的梯度下降策略

  • 实现多 server 节点的架构,避免单 master 节点带来的带宽瓶颈和内存瓶颈

  • 使用[[一致性哈希]],range pull 和 range push 等工程手段实现信息的最小传递,避免广播操作带辣的全局性网络阻塞和带宽浪费

问题

  • 各 worker 之间如何同步?

  • 如何解决 DNN weight

    • AllReduce 完成 dnn weight 在各 worker 节点同步

    • feature embedding 使用纯异步 ASP 模式,dnn weight 使用纯同步 SSP 模式

worker 之间的并行策略

  • BSP(Bulk Synchronous Parallel) #card
    image.png

image.png

  • SSP(Stalness Synchronous Parallel)#card
    image.png

image.png

  • ASP(Asynchronous Parallel)#card
    image.png

实现

  • 基于ps-lite实现分布式算法

  • 阿里巴巴的XDL

  • 快手的Persia

Ref


Pair RDD

数据分区

  • 直行聚合或分组操作时,可以给定 saprk 的分区数

Position Representation

[[Position Encoding]] 和 [[Position Embedding]] 区别

  • 学习式,不可扩展

    • [[@Convolutional Sequence to Sequence Learning]]
  • 固定式

分类

  • absolute positions 绝对位置编码

  • relative positions 相对位置编码

    • 关注一定范围内的相对次序关系

Position Representation 结果 Concat 和 Add 的区别

  • 联系 :-> 三个 embedding 相加相当于三个原始的 one-hot 拼接再经过一个全连接网络。

  • concat 效果不会比 add 差,但是会增加参数量

Position Representation 信息到达上层之后为什么不好消失?#card

  • [[ResNet]] 机制,模型输入特征会直接传递到上层

  • 有一个 Transformer 版本每一个 encoder 输入都会加上 position embedding


Positional Encoding

为什么使用

如何理解Transformer论文中的positional encoding,和三角函数有什么关系? - 知乎 (zhihu.com) #card

  • 如何构建一种位置编码?

    • 直接使用下标计数 PE= pos

      • 序列没有上限,后面的词可能位置编码非常大。
    • 使用文本长度对每个位置归一化 PE = pos/(T-1)

      • 不同长度文本的位置编码步长是不同的,长文本和短文本中两个相邻词的位置编码存在差异
    • 有界周期函数

  • 本质对位置信息进行建模,需要满足

    • 需要体现同一个单词在不同位置的区别

    • 相对次序关系,体现先后次序关系,编码差异不应该依赖于文本长度

    • 值域落在一定数值区间内

Ref


Positional Encoding/Sinusoidal

公式

  • PE(pos,2i)=sin(pos/100002i/d model )P E_{(p o s, 2 i)} =\sin \left(\operatorname{pos} / 10000^{2 i / d_{\text { model }}}\right)

  • PE( pos, ,2i+1)=cos( pos /100002i/d model )P E_{(\text { pos, }, 2 i+1)} =\cos \left(\text { pos } / 10000^{2 i / d_{\text { model }}}\right)

pos 代表位置编号,i 代表维度。不同维度对应不同波长的曲线,波长从 2pi 到 2000pi。选择这个看起来不是很直观的公式,主要是利用三角函数的特性实现 PEposPE_{pos} 线性表示 PEpos+kPE_{pos+k}

  • 波长比较长时,相邻字的位置编码之间的差异比较小

  • 不同维度上应该用不同的函数表示位置编码

  • 三角函数的周期性表示相对位置信息。位置 $$\alpha + \beta$$ 的向量可以表示成位置 $$\alpha$$ 和位置 $$\beta$$ 的组合

    • PE( pos +k,2i)=PE( pos, 2i)×PE(k,2i+1)+PE(pos,2i+1)×PE(k,2i)P E(\text { pos }+k, 2 i)=P E(\text { pos, } 2 i) \times P E(k, 2 i+1)+P E(p o s, 2 i+1) \times P E(k, 2 i)

    • PE( pos +k,2i+1)=PE( pos, 2i+1)×PE(k,2i+1)PE(pos,2i)×PE(k,2i)P E(\text { pos }+k, 2 i+1)=P E(\text { pos, } 2 i+1) \times P E(k, 2 i+1)-P E(p o s, 2 i) \times P E(k, 2 i)

  • 实现表达 relative position 的可能

  • 使用sin+cos后,还需要有正向和反向吗?

为什么公式中有一个魔法值 10000? #card

  • 2i = d_model = 512,周期为 2pi*10000

  • 确保循环周期足够大,以便编码足够长的文本。


Potential Outcome Framework

[[Potential Outcome Framework 专有名词]]

[[Treatment Effect]]

  • [[ITE]] 个体干预效果

  • [[ATE]] Average Treatment Effect,针对全体用户

    • [[CATE]] 条件,给定条件下的全体用户
  • [[ATT]] 实验组

[[Potential Outcome Framework 简化问题的三个假设]]

经典方法

  • [[Re-weighting methods]] 解决的问题是控制组和治疗组的分布不同

  • [[Matching methods]] 关键在于如何度量样本之间的相似性

  • Tree-based Method - [[Causal Forest]] 在分裂最大化 ITE 方差

  • [[Representation Learning Method]] 本质是对反事实进行预测

  • [[Meta-Learner]]


Post Norm 和 Pre Norm 区别

image.png

  • [[Pre Norm]] :<-> xn+1=xn+f(norm(xn))x_{n+1}=x_{n}+f\left(\operatorname{norm}\left(x_{n}\right)\right)

    • 第二项的方差由于有 norm 不会随层数变化,x 的方差在主干上随层数累积。到达深层后,单层对主干的影响很小,不同层在统计上类似。

    • xn+2=xn+1+f(norm(xn+1))=xn+f(norm(xn))+f(norm(xn+1))xn+2f(norm(xn))x_{n+2}=x_{n+1}+f\left(\operatorname{norm}\left(x_{n+1}\right)\right)=x_{n}+f\left(\operatorname{norm}\left(x_{n}\right)\right)+f\left(\operatorname{norm}\left(x_{n+1}\right)\right) \approx x_{n}+2 f\left(\operatorname{norm}\left(x_{n}\right)\right)

    • 这样训练的深层模型更像是扩展模型宽度,相对好训练。

  • [[Post Norm]] :<-> xn+1=norm(xn+f(xn))x_{n+1}=\operatorname{norm}\left(x_{n}+f\left(x_{n}\right)\right)

    • 主干方差恒定,每层对 x 都有较大影响,没有从头到尾的恒等路径,梯度难以控制,更难收敛,训练出来效果好。

    • 突出残差分支

    • [[BERT]]训练时,需要 warmup

      • 输出层的期望梯度非常大,不稳定
      • [[Adam]] 和 [[SGD]] 都需要

pre 和 post 具体含义 #card

  • 先 norm 再残差 [[Pre Norm]] :<-> xn+1=xn+f(norm(xn))x_{n+1}=x_{n}+f\left(\operatorname{norm}\left(x_{n}\right)\right)

  • 先残差再 norm [[Post Norm]] :<-> xn+1=norm(xn+f(xn))x_{n+1}=\operatorname{norm}\left(x_{n}+f\left(x_{n}\right)\right)

[[DeepNet]]

Ref


Problems

我的力扣主页: 算法花园,代码仓库:xiang578/acm-icpc

[[2025/04]]

  • [[2025/04/28]] 2302. 统计得分小于 K 的子数组数目 滑动窗口/尺取法/双指针

    • 最近写过最简单的 hard 题。

    • 维护一个区间 lr, r 增加,判断区间是否满足要求,如果不满足增大 l 一直到区间为 0 或者满足条件,因为元素都是正的,l 越小,lr 的和肯定是越小。找到满足的 lr 之后,对答案的贡献就是 r-l+1.

  • [[2025/04/25]] 2845. 统计趣味子数组的数目 前缀和

    • 刚开始想处理后缀,搞半天都调不对。。。其实方法不对。

    • 看答案是处理前缀,差一步啊。

  • [[2025/04/24]] 2799. 统计完全子数组的数目 暴力

    • 数据量比较小,可以平方暴力。感觉可以改成尺取之类的方法
  • [[2025/04/23]] 1399. 统计最大组的数目 模拟

    • 数据量比较小,按题意模拟即可。后来再想有什么规律,没有找到。。。
  • [[2025/04/22]] 2338. 统计理想数组的数目[[素数筛]]+[[组合数学]]

    • 有点难,只能看到出暴力的方案。题解也看了好久。

    • 最后转化成,n 个盒子放 m 个球的问题(包含 k 种球)

  • [[2025/04/21]] 2145. 统计隐藏数组数目

    • 模拟。数据第一个数字确定后,整个数组就确定。先计算数组中相对于第一个数字的最大和最小偏差。然后枚举第一个数字,计算该数字加上最大和最小偏差后得到的数字是否还在要求的范围内。如果符合要求就是一个可行解。
  • [[2025/04/19]] 2364. 统计坏数对的数目:暴力算法平方,常规找规律降到线性

  • [[2025/04/17]] 2176. 统计数组中相等且可以被整除的数对:按题意模拟

[[2023/07]]

[[2023/03]]

  • [[LC1630. 等差子数组]] #[[Brute Force]]

  • [[LC887. 鸡蛋掉落]] #二分搜索 #动态规划 挺好一个题目,刚开始以为是一个简单的二分,然后找了几个小时都没有找到规律。然后想用 dfs 去解,又发现超时。

    • 几年前碰到过类似的题目,求最小满足题目条件的答案。很难直接计算,转化成二分结果+检验结果的方法去求解。

[[2022/01]]

  • 2045. 到达目的地的第二短时间

    • 记录一个第二次访问终点需要经过多少个点

    • 点数确定通过时间和等待时间都能算出来。

  • 2034. 股票价格波动 模拟 + 有限队列

  • 1332. 删除回文子序列 多读几遍题意,每次产出的是子序列而不是子串

  • 1345. 跳跃游戏 BFS

    • 简单题,写了快半个小时,先想清楚流程再写,不要边写变想。

    • 按 arr[i] 聚合数字,然后每个点只能访问一次,访问后删除。

  • 2029. 石子游戏 IX推荐 博弈论

    • 找规律,反正是类似于 1-(1-2)-...2-(2-1)-... 形式

    • 写不出简洁的规律,直接上了模拟……

  • 219. 存在重复元素 II

    • hash

    • 效率更高一些,滑动窗口内 hash

  • 539. 最小时间差

    • 按题意模拟,坑点在于时间是一个环,需要考虑左边和右边最近的时间。
  • 1220. 统计元音字母序列的数目 简单 DP

    • 数据忘记初始化导致浪费十多分钟看问题。
  • 382. 链表随机节点

    • python random.randint(st, ed)

    • 蓄水池抽样:遍历链表,假设当前遍历到第 i 个节点,以 1/i1/i 的概率选择第 i 个节点作为最后的答案。

  • 1716. 计算力扣银行的钱 简单模拟或求等差数列通项公式

  • 373. 查找和最小的K对数字

    • 暴力:两个数组最多前 1000 个数字组合,然后排序取前 k 个

    • 看题解

      • 使用优先队列,每次取出最小的数字 (ai,bj)(a_i, b_j) 后,往队列中 push (ai+1,bj)(a_{i + 1}, b_j)(ai,bj+)(a_i, b_{j+})
  • 334. 递增的三元子序列

    • 第一反应是用最长上升子序列的方法。

    • 仔细想了一下,对一个位置 i 维护之前最小的结果 $$min(nums[0…i-1])$$ 和之后最大的结果$$max(nums[i+1…n-1])$$。如果这三个数不相同,就是一个可行解。

  • 1036. 逃离大迷宫 搜索 + 优化剪枝

    • 19 年就尝试过这题,然后当时暴力写了一个搜索,第一个样例就超时了……

    • 坐标范围是 1e6,所以暴力搜索的空间可能是 1e12。题目关键是 blocked.length <= 200 这些 blocked 形成包围圈最大是 100*100?(在一个角上借助两条边围成封闭的正方形)。从起点和终点开始搜索,如果可以访问到超过 1e4 个空间,那么代表没有被包围住。

  • 306. 累加数 DFS

    • 枚举最开始两个数字,然后check之后的数据是否合法。

    • 字符串最长长度等于 35,这个数字会超过 long long 的范围。但是观察一下可以发现 a + b = c 情况下,三个数字的长度不会超过字符串长度的 1/2,大概是 18 位,枚举时一个数字最大18位,这样就不会超出 long long 范围。

    • 反思:没有考虑字符串长度小于 3 的特殊情况

  • 238. 除自身以外数组的乘积

    • 空间复杂度 O(n)O(n) 写法:维护后缀乘积结果。

    • 空间复杂度 O(1)O(1) 写法:用返回数组保存前 0...i0...i 的乘积,然后逆序用一个变量保存 i+1..n1i+1..n-1 的乘积,然后可以根据这两个信息得到结果。

[[2021/09]]

  • 5847. 找到所有的农场组 暴力,一个格子是不是起点可以通过判断上边格子和左边格子得知。

  • 5848. 树上的操作 模拟,先想清楚然后再写

  • 5849. 好子集的数目 枚举所有合法组合的个数

  • 5866. 数组的最大公因数排序 [[并查集]] + [[素数筛]],有相同因子的数会在同一个集合中。

  • 5865. 访问完所有房间的第一天 漏看一个条件,实际上是傻逼题,还是错了好几次,1e9 相加会爆 int 以及返回答案前也需要取模。

  • 1977. 划分数字的方案数 挺复杂的,写了好几个小时,看题解才过…… n=3500,暗示是 O(n2)O(n^2) 的算法

    • 设以 nums[i…j] 为结尾的方案数是 dpi,jdp_{i,j}

    • 可以发现 dpi,j=k=2ij1i1dp[k][i1],dpi,j+1=dpi,j+dp2ij2,i1dp_{i,j}=\sum_{k=2*i-j-1}^{i-1}dp[k][i-1], dp_{i,j+1}=dp_{i,j} + dp_{2*i-j-2,i-1},维护一个前缀和。

    • 比较 nums[i…j] 和 nums[2*i-j-1…i-1] 大小,可以先预处理出以 i 和 j 开始的字符串的最大相同长度 lcp[i][j]。

  • LCP 42. 玩具套圈:r 比较小,可以暴力枚举,被抬一手还是没有写出来。。。需要注意细节。不要提交 debug。

  • LCP 43. 十字路口的交通

  • 36. 有效的数独:判断数独当前局面是否合法。

  • 37. 解数独:求解数独,上一题的进阶。

[[2021/08]]

2019 WF

  • Problem - J - Codeforces 500 个洞,50 个人。a[500][50],可以将 a[i][j] 用 l 替代,然后对 a[i] 求和,再从小到达排序,得到 i 的名次。问每个 i 最小的排名是多少?

Progressive Summarization

Progressive Summarization: A Practical Technique for Designing Discoverable Notes - Forte Labs

[[Tiago Forte]]

  • 做笔记的意义是什么:

  • 通过记笔记这个过程去记忆知识

  • 给未来查阅相关信息节省时间

  • 这篇文章介绍如何对笔记进行不同级别的抽象,对未来越来价值,抽象程度越高。其实可以作为 [[Zettelkasten]] 原子化原则的一个补充。

渐进式总结

  • 困难的不是把信息从一个地方传输到另一个地方,而是跨越时距传递。

  • 你看得东西没错,你只是没找对合适的时间。

  • 知识的挑战不在于获取知识。建立一个系统知道什么知识有价值,将部分的知识跨越时距传递。

  • 把知识从公共知识变成你的[[暗知识]]即经验知识。

Note-first knowledge mangement

  • 与[[Zettelkasten]]对比

  • Tagging-first :笔记被认为是不断变化的、虚拟的、相互关联的思维矩阵。思维的运作方法不适应这种抽象的概念。

  • Notebook-first 对应[[PARA]] 中的思路。

  • Note-first 笔记独立

Designing discoverable notes

  • 现在的笔记对未来的你不一定有作用

  • [[idea]] 花费大力气写的论文笔记,如果不在博客上发布,自己还会去看?

  • 注重 note 的可发现性和可理解性:创造高度浓缩的摘要。

Opportunistic compression

  • 大部分人比较擅长对阅读的事物做详尽的笔记。

  • 如何让我现在正在消费的东西,更容易被未来的自己发现?对笔记进行分层处理。

  • 一个例子:

  • 文字本身就是自己最好的标签系统。

why

  • 你把耗时但无风险的活动(阅读、高亮、总结)尽可能早地准备,而把快速但有风险的活动(执行、决策、交付)尽可能推到未来。

Guidelines and Principles

    1. DON’T APPLY ALL LAYERS TO ALL NOTES 不要在所有的笔记上都应用所有的图层
    1. USE RESONANCE AS YOUR CRITERIA 以共鸣为标准
    1. DESIGN A SYSTEM FOR THE LAZIEST VERSION OF YOURSELF 为自己设计一个用的最顺手的系统
    1. KEEP YOUR NOTES GLANCEABLE 让笔记保持一目了然

最后这一篇笔记并不符合[[Progressive Summarization]]原则。


Prophet

y(t)=g(t)+s(t)+h(t)+ϵ(t)y(t) = g(t) + s(t) + h(t) + \epsilon(t)

  • 非线性增长项 + 周期项 + 节假日效应项 + 误差项

  • 利用极大似然估计从历史数据中拟合上述公式中的前三项

良好的短期趋势和周期性捕捉能力

Ref


Python/Decorator

最终返回嵌套函数的引用

  • 覆盖 __name____code__

不修改原函数,不修改调用方法。通过标记,^增强函数功能^

  • 为已经存在的对象(函数和类)添加额外的功能

  • 函数修饰器在导入模块时立即执行,被装饰函数只在明确调用时运行。

@ 装饰器[[语法糖]]

  • 等价于 add = timer(add)
1
2
3
4
5
6
7
8
9
def timer(func):
def wrapper(*arg, **kw):
### code
return func(*arg, **kw)
return wrapper

@timer
def add(arg):
pass

标准库中的装饰器

  • lru_cache 把耗时的函数结果保存起来

    • 字典存储结果,键是传入的定位参数和关键字参数
  • 单分派泛函数 functools.singledispatch PEP 443

    • Python 不支持重载方法或函数

    • 使用这个装饰器后根据第一个参数的类型执行对应的函数。

    • @singledispatch 标记基函数

    • @base_function.register(type)装饰专门的函数

      • type 使用抽象基类
  • @staticmathod

  • @classmethod

  • @property

叠放装饰器,按叠放顺序执行

1
2
3
4
@a
@b
@c
def f ():
  • 等价于 f = a(b(c(f)))

参数化装饰器


Python/queue

queue.Queue()

  • put

  • get

queue.LifoQueue()

  • 后进先出型队列,与普通栈结构类似

queue.PriorityQueue()

collections.deque 线程安全

  • rotate 旋转

asyncio

heapq

  • nlargest

  • nsmallest


Pytorch

[[nn.ModuleList]] 存储不同 module,并将每个 module 的 parameters 添加到网络之中的容器

[[torch.nn]]

torch.topk

[[torch.gather]]

[[Pytorch/tensor]]

torch.argsort(*input*, *dim=-1*, *descending=False*, *stable=False*) → [Tensor]

  • 按 input dim 维度排序

  • 返回 input 对应元素的排序结果

https://www.zhihu.com/question/352525266/answer/3395318281 pytorch 架构


Q-Note

A Q-Note is a Question Note.

  • A [[Q-Note]] is used within your academic writing as an exploratory staging space for deeper thinking and connections between all other note types. :-> 用于深入思考和连接其他所有类型的笔记
  • A [[Q-Note]] sits at the Page level with the question as a title and prefaced with a Q. :-> 一个以 Q - 问题 为标题的 page
  • A [[Q-Note]] poses a question or a theory (used as the page title, prefaced by a Q that needs further support or exploration. :-> Q-Note 对应一个问题或理论,需要材料支持或进一步探索
  • A [[Q-Note]] is a page on it’s way to becoming an [[Z-Note]]. Q-Note’s make great outline line items for writing projects. :-> Q-Note 会成为 Z-note。Q-Note 也是写作的大纲、标题、章节

R-Learner

论文出处:Quasi-Oracle Estimation of Heterogeneous Treatment Effects

适用情形:随机干预实验的数据

image.png

  • ex :-> 特征 x 对干预 w 的影响,也是 [[倾向性得分]]

  • m(x)=E(YX=x)m^*(x)=E(Y \mid X=x) :-> 基于特征 x 对目标 y 的影响 conditional mean outcome

  • m(x)=E(YX=x)=μ(0)(x)+e(x)τ(x)m^*(x)=E(Y \mid X=x)=\mu_{(0)}^*(x)+e^*(x) \tau^*(x) 拆解逻辑 #card

    • 条件期望响应结果 E(YX=x)E(Y \mid X=x) 可以表示为

      • 不施加干预时的条件期望响应结果 μ(0)(x)\mu_{(0)}^*(x)

      • 倾向性得分 e(x)e^*(x)(即条件干预概率)与干预效应 τ(x)\tau^*(x) (即 CATE)的乘积。

  • 观测结果 Yi=μ(0)(Xi)+Wiτ(Xi)+εiY_i=\mu_{(0)}^*\left(X_i\right)+W_i \tau^*\left(X_i\right)+\varepsilon_i 分解为 #card

    • 无干预时的条件响应结果 μ0(Xi)\mu_0^*(X_i)

    • 是否施加干预 WiW_i 与因果效应 τ(Xi)\tau^*(X_i) 的乘积

    • 残差 εi\varepsilon_i

  • 观测结果变换 Robinson’s transfomation #card

    • 两边分别减去条件响应结果 m(Xi)m^*(X_i)

    • 通过上述转化,我们会发现,假定我们已经有了 m(x)m^*(x) 以及 e(x)e^*(x) 的表达式,我们就可以通过最小化残差来估计得到 treatment effect τ(x)\tau^*(x) ,即我们前面提到的通过一个 loss 优化问题来估计得到因果效应。

  • 最终训练一个模型 τ(Xi)\tau(X_i) 最小化损失函数 τ()=argminτ{1n1n((Yim(Xi))(Wie(Xi))τ(Xi))2+Λ(τ())}\tau^*(\cdot)=\arg \min _\tau\left\{\frac{1}{n} \sum_1^n\left(\left(Y_i-m^*\left(X_i\right)\right)-\left(W_i-e^*\left(X_i\right)\right) \tau\left(X_i\right)\right)^2+\Lambda(\tau(\cdot))\right\} #card

    • 用权重为 (Wie(Xi))2\left(W_i-e^*\left(X_i\right)\right)^2 的样本 X 去拟合 τ(Xi)=Yim(Xi)Wie(Xi)\tau\left(X_i\right)=\frac{Y_i-m^*\left(X_i\right)}{W_i-e^*\left(X_i\right)}

    • 其中 Λ\Lambda 是模型τ(Xi)\tau(X_i) 参数的正则项,

    • e(Xi)e^*(X_i)m(Xi)m^*(X_i) 是事先训练好的模型,

    • 此时 τ(Xi)\tau(X_i) 的输出结果就是我们想要的 CATE。

优点

  • 将因果效应的估计问题转化为 损失函数的优化 问题,提供了一种一般性的因果效应的预测框架。
    缺点:#card

  • 1)预测效果非常依赖模型 e(Xi)e^*(X_i)m(Xi)m^*(X_i) ,但是这两个模型不一定能预测得准确。

  • 2)假设了潜在结果 YiY_i 的分解是一种线性关系,限制了模型对复杂数据的拟合能力。


RNN

image.png
occlusion:: eyIuLi9hc3NldHMvaW1hZ2VfMTcyNzEwMTQwODE4OV8wLnBuZyI6eyJjb25maWciOnsiaGlkZUFsbFRlc3RPbmUiOnRydWV9LCJlbGVtZW50cyI6W3sibGVmdCI6MTU0NC4wNzUyNzMzNjA3MzQ0LCJ0b3AiOjUwMC42NTQzNTc4NTAwMzkxLCJ3aWR0aCI6NzIyLjE0MDMwMTkxMDIxMzEsImhlaWdodCI6MTA3LjMwMjU3NDYzMDExODY3LCJhbmdsZSI6MCwiY0lkIjoxfSx7ImxlZnQiOjE0NjUuNTcxNzQ2MTMzNjQ4NSwidG9wIjo2MTYuNjU1MTg4MjQ2MjkxNiwid2lkdGgiOjU1OS4xNDU3NzEwOTM3ODQ2LCJoZWlnaHQiOjk5LjMwMzA3NjczMDE3ODMsImFuZ2xlIjowLCJjSWQiOjJ9LHsibGVmdCI6NzAzLjQ4OTk5OTUyMTU3MjgsInRvcCI6Mzk2LjI5NzA3MzY4NDQxODI1LCJ3aWR0aCI6ODIuMDIwNTAzNjg3MzcxODQsImhlaWdodCI6NzEuNTY1NDQ4ODQ0OTE0MjMsImFuZ2xlIjowLCJjSWQiOjN9LHsibGVmdCI6ODI1LjUzMjQzMjk1ODM4MTMsInRvcCI6MTMxLjk4MTg1NjMyMTg0MjEsIndpZHRoIjoxNDcuODE2MDUxNjczNjU5MSwiaGVpZ2h0Ijo3MC44MDQyOTIyNzcyMjA3LCJhbmdsZSI6MCwiY0lkIjoyfV19fQ==
ht=tanh(Wxt+Uht1+b)h_{t}=\tanh \left(W x_{t}+U h_{t-1}+b\right)

  • dhtdθ=htht1dht1dθ+htθ\frac{d h_{t}}{d \theta}=\frac{\partial h_{t}}{\partial h_{t-1}} \frac{d h_{t-1}}{d \theta}+\frac{\partial h_{t}}{\partial \theta}

    • htht1>1|\frac{\partial h_{t}}{\partial h_{t-1}}| >1,导致 :<-> 梯度爆炸
      • 如何解决 :-> 梯度裁剪
    • htht1<1|\frac{\partial h_{t}}{\partial h_{t-1}}| < 1,导致 :<-> 梯度消失
      htht1=(1ht2)U\frac{\partial h_{t}}{\partial h_{t-1}}=\left(1-h_{t}^{2}\right) U
  • 结合 ht=tanh(Wxt+Uht1+b)h_{t}=\tanh \left(W x_{t}+U h_{t-1}+b\right)
    对应的曲线

    • 为什么隐状态激活函数使用 [[Tanh]] 而不是 [[ReLU]]?
      • 为什么用 Tanh :-> htht1\frac{\partial h_{t}}{\partial h_{t-1}} 是有界的,可以缓减梯度爆炸的风险。
      • 为什么不用 ReLU :-> 正半区没有上限
        • 将 U 初始化在单位矩阵附近 + 梯度裁剪也可以得到不错的效果
  • 如果 U 很大,ht 会接近于 1,$$\frac{\partial h_{t}}{\partial h_{t-1}}$$ 反而会小
    [[RNN/Backward]]

[[Ref]]


RDD 持久化

持久化指将数据进行保存,避免数据丢失。

RDD 持久化并非将数据落盘,而是缓存数据,供后续计算使用。

Cache()

  • 底层是 persist(),没有指定参数,默认 MEMORY_ONLY

persist()

  • 使用指定的方式进行持久化

  • StorageLevel.

    • MEMORY_ONLY

      • 内存优先

      • RDD 分区空间不够,旧的分区会直接删除

    • MEMORY_AND_DISK_SER

      • 优先内存,内存不足到磁盘。

      • 节省重新计算的开销

    • MEMORY_ONLY_SER

      • 在内存存放序列化后的数据

        • 序列化存储能减少内存开销,反序列化会增大 cpu 开销
    • DISK_ONLY

  • SER

    • 序列化保存

Checkpoint

  • 将 RDD 中间结果二进制形式写入磁盘

  • 使用

    • sc.setCheckpointDir(“hdfs://hadoop102:9820/output/a”)

    • rdd.checkpoint()

    • 手动释放rddx.unpersist(true)

Question

  • RDD 持久化方式? #card

    • Cache()

    • persist()

  • memory_only 如果内存存储不了,会怎么操作? #card

    • 利用 [[LRU]] 的缓存策略把最老的分区从内存中移除

    • 下一次使用被移除的分区需要重新计算


RDD

共享内存模型

  • 只读的记录分区的集合

依赖关系

  • 窄依赖 narrow dependency

    • OneToOneDependency

    • 父 RDD 每个分区只被子 RDD 的一个分区所使用

    • 不需要 shuffle

    • map,union

  • 宽依赖 wide dependency/shuffle

    • 父 RDD 的每个分区可能被多个子 RDD分区所使用,会有 shuffle 产生

    • groupByKey

Partitioner 分区器

  • 定义如何分布数据

    • 一个 RDD 分成多少个分区,每个分区数据量多发,从而决定每个 Task 将处理哪些数据
  • 可使用分区器

    • [[HashPartitioner]] 给定的 key,计算 hashCode,对分区个数取余

    • [[RangePartitioner]] 尽量保证每个分区中的数据量均匀,且分区与分区之间是有序的。

      • rangeBounds
    • 自定义分区器

Question

  • RDD是弹性数据集,“弹性”体现在哪里呢?

    • 存储弹性

      • spark 计算产生的中间结果会保存在内存中,如果内存不足会自动存储在磁盘
    • 容错弹性

      • 计算过程中如果出错会自动重试

        • task 失败会重试

        • stage 失败会重试失败的分片

    • 计算弹性

      • 如果计算过程中数据丢失,会根据 RDD 的依赖关系重新计算得到数据
    • 分区弹性

      • RDD 会根据文件大小动态分区
  • 你觉得RDD有哪些缺陷?

    • 惰性计算,中间数据默认不保存,每次操作都会对数据集重复计算,某些计算量比较大的操作可能会影响系统的运行效率。
  • RDD分区和数据块有啥联系?


Raycast

每一个命令支持按 cmd + k 查看更多操作

设置

search

Quicklink 拼接链接并通过浏览器打开(实现在指定网站搜索关键词或跳转到指定页面)

  • 链接格式 https://www.baidu.com/s?wd={query},其中 query 对应需要搜索的关键词

  • 官方使用说明

Clipboard History 剪贴板历史管理

软件启动

  • 设置快捷键

  • 命令框

Snippets 文本片段

窗口管理

自定义脚本

  • 自动git add 和 git commit logseq文件夹

SuggestionsManage Fallback Commands 中设置

image.png

功能

  • [[Flight Tracker]]

插件

[[Alfred]] 对比

  • 免费,大部分功能可以直接使用,但是无法同步配置

  • Alfred 按版本付费

Ref


ResNet

单纯堆积卷积层,并不能让模型表现的更好。

vanishing/exploding gradients

离输入近的网络层会产生梯度消失现象,比较难训练,接到靠近输出的层。
使用 Residual Block

Deep Residual Learning for Image Recognition

  • 学习 residual mapping 比 original unreferenced mapping 轻松

  • identity mapping 给模型提供 shortcuts,如果 block 前后输入输出大小不同,可以通过 w 参数转化

  • 在加法之后过第二个非线性单元

  • bottleneck architectures

  • 为了解决层数变多时,参数数量增加问题。通过 bottleneck 结构,减少维持和左边相同的参数量,然后网络变成 3 层

[[Identity Mappings in Deep Residual Networks]]

[[Residual Networks Behave Like Ensembles of Relatively Shallow Network]]

[[ResNet/Question]]

[[Ref]]


SGD

每次迭代只采样一个样本

优化 learn-rate,自适应学习率

  • 自适应学习率的方法:对不同的参数使用不同的学习率,参数更新频率和更新步长负相关

  • [[Annealing]],全局共享learn_rate 所有的参数以相同的幅度进行更新

    • 随步衰减

    • 指数衰减

    • 1/t衰减

  • [[AdaGrad]],参数独立 learn_rate 更新幅度取决于参数本身

    • θt+1=θtηGt+ϵgt\theta_{t+1}=\theta_t-\frac{\eta}{\sqrt{G_t+\epsilon}} \odot g_t

    • nt=nt1+gt2n_t=n_{t-1}+g^2_t

    • Δθt=ηnt+ϵ\Delta \theta _t = -\frac{\eta}{\sqrt{n_t+\epsilon}}

    • 计算一个时间区间内的梯度值累积和 [[移动平均]]

      • AdaDelta 分母滑动区间 + 单位矫正

        • E[g2]t=γE[g2]t1+(1γ)gt2E\left[g^2\right]_t=\gamma E\left[g^2\right]_{t-1}+(1-\gamma) g_t^2

        • E[Δθ2]t=γE[Δθ2]t1+(1γ)E[Δθ2]tE\left[\Delta \theta^2\right]_t=\gamma E\left[\Delta \theta^2\right]_{t-1}+(1-\gamma) E\left[\Delta \theta^2\right]_t

        • Δθt=RMS[Δθ]t1RMS[g]tgt\Delta \theta_t=-\frac{R M S[\Delta \theta]_{t-1}}{R M S[g]_t} g_t

      • [[RMSProp]] 分子滑动区间

        • cache = decay_rate * cache + (1 - decay_rate) * dx**2

        • x += - learning_rate * dx / (sqrt(cache) + eps)

        • E[g2]t=0.9E(g2)t1+0.1gt2E\left[g^2\right]_t=0.9 E\left(g^2\right)_{t-1}+0.1 g_t^2

        • θt+1=θtηE[g2]t+ϵ\theta_{t+1}=\theta_t-\frac{\eta}{\sqrt{E\left[g^2\right]_t+\epsilon}}

        • [[Adam]] 分子动量版

          • vt=β2vt1+(1β2)gt2v_t=\beta_2 v_{t-1}+\left(1-\beta_2\right) g_t^2

          • mt=β1mt1+(1β1)gtm_t=\beta_1 m_{t-1}+\left(1-\beta_1\right) g_t

          • θt+1=θtηv^t+ϵm^t\theta_{t+1}=\theta_t-\frac{\eta}{\sqrt{\hat{v}_t+\epsilon}} \hat{m}_t

          • [[AdamW]][[LazyAdam]]

优化梯度方向,减小震荡

  • [[Momentum]]:强化相关方向的训练和弱化无关方向的震荡来加速 SGD 收敛

    • vt=γvt1+ηθJ(θ)v_t=\gamma v_{t-1}+\eta \nabla_\theta J(\theta)

    • V[t+1] = rho * v[t] + dx;

    • x[t+1] = x[t] - learningRate * V[t+1]

  • Nesterov 梯度加速法

    • 预判前方地形

    • vt=γvt1+ηθJ(θγvt1)v_t=\gamma v_{t-1}+\eta \nabla_\theta J\left(\theta-\gamma v_{t-1}\right)

梯度下降法 [[SGD]]

  • 并行化,Scalable

    • Downpour SGD

    • Hogwild!


S-Learner

image.png

  • S 的由来 :-> 将干预变量 TT 和背景变量 XX 一起作为特征输入到单个模型 MM (Single,S 的由来)学习 M(X,T)=E(YT,X)M(X,T) = E(Y|T,X)

  • 把用户是否干预作为特征加入到模型构建中

  • 预测阶段如何得到反事实结果? #card

    • 在预测时通过修改干预变量 TT 的值预测获得反事实结果,
    • 最终的 CATE 估计为 τ^(x)i=Ms(Xi,T=1)Ms(Xi,T=0)\hat{\tau}(x)_i=M_s\left(X_i, T=1\right)-M_s\left(X_i, T=0\right)

优点:#card

  • 1)干预变量作为特征可以适用于多值干预。

  • 2)干预 / 控制组样本共同训练单个模型的参数,有助于缓解干预组样本稀疏时的欠拟合问题,提高模型精度

  • 可以直接使用现有分类算法

  • 减少双模型误差累积

缺点:#card

  • 干预变量作为输入特征可能会被淹没在其他众多特征中,如果干预变量与其他特征存在相关性时会更严重。间接计算增量,无法根据增量对模型进行优化

S-Learner 中缓解特征被忽视的方法 #card

  • 构造更强的交叉特征,

  • 直连模型输出层干预打分,

  • 作为裁判特征输出权重


SVD

将矩阵分解成奇异向量和[[奇异值]]

A=UDVTA=UDV^T


Separable Convolution

减少卷积计算量

它的核心思想是将一个完整的卷积运算分解为两步进行,分别为Depthwise Convolution与Pointwise Convolution。

  • Depthwise Convolution
    • 参数量从 $$d^2k$$ 降到 $$dk$$

  • Pointwise Convolution


STGCN

[[@Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting]]

已有方法(超过30分钟的长周期预测)

  • dynamical modeling

    • differential equations 微分方程
  • data-driven methods

结构

  • Graph CNN

    • Chebyshev Polynomials Approximation

    • 1st-order Approximation

  • Gated CNNs for Extracting Temporal Features

Ref


Semi-Supervised Classification with Graph Convolutional Networks

H(l+1)=σ(D~12A~D~12H(l)W(l))H^{(l+1)}=\sigma ( \tilde{D} ^ {-\frac{1}{2}} \tilde{A} \tilde{D} ^ {-\frac{1}{2}} H^{(l)} W^{(l)})

  • D~12A~D~12\tilde{D} ^ {-\frac{1}{2}} \tilde{A} \tilde{D} ^ {-\frac{1}{2}} 利用对称矩阵的形式归一化 renormalization

    • 避免顶点的度越大,学到的表示越大

    • A 是图的邻接矩阵

    • D 是顶点的度矩阵,对角线上的元素依次是各个顶点的度

    • A~=A+IN\tilde{A}=A+I_N

  • H(l+1)=σ(A~H(l)W(l))H^{(l+1)}=\sigma\left(\tilde{A} H^{(l)} W^{(l)}\right)

    • A~\tilde{A} 矩阵 nn,H(l)H^{(l)} 矩阵 nm,WW 矩阵 mu,H(l+1)H^{(l+1)} 矩阵 nu

    • A~H(l)\tilde{A} H^{(l)} 考虑节点本身和邻居的信息

+ 

Seq2Seq

TODO [[Sequence to Sequence Learning with Neural Networks]]

[[Massive Exploration of Neural Machine Translation Architectures]]

TODO google/seq2seq: A general-purpose encoder-decoder framework for Tensorflow

Encoder - Decoder

Decoder

  • decoder 涉及输入是正确的单词还是预测的单词

    • Free Running :-> 使用 Decoder 上一步的预测结果作为当前步的输入

      • 错误累积 :-> 每次输入预测单词,某个单词预测错,后面会跟着错,模型很难收敛
    • [[Teacher Forcing]] :-> 使用目标文本的“标准答案”作为Decoder的输入

      • 缺点 #card
        • 每次输入正确单词,会导致 overcorrect

        • exposure bias 误差爆炸/曝光误差 (训练环节和预测环节存在行为差异)

    • Scheduled sampling 计划采样 #card

      • 1-p 的概率用 teacher forcing

      • 以一定概率随机选择用模型输出还是用真值,选择概率随着训练的推进不断调整

  • [[Beam Search]] 每一步,多选几个作为候选,最后综合考虑,选出最优的组合。

[[Transformer]] 不适用 RNN

CNN Seq2Seq [[Convolutional Sequence to Sequence Learning]]


Shapley Value

[[SHAP]](SHAPley Additive exPlanations)

计算例子:用年龄、性别、工作来预测收入

  • 3 个特征能训练 8 个不同的模型

    • 边际贡献:两个节点的预测之间的差距可以归因于附加特征的影响

    • 下图中 w1 对应的边是该样本 age 带来的边际收益:50k - 40k = -10k

    • age 特征整体的计算公式为

S H A P_{\text {Age }}\left(x_0\right) & =w_1 \times \text { MCAge. }{\text { Age }}\left(x_0\right)+ \
& =w_2 \times \text { MCAge. }{\text { Age, Gender }}\left(x_0\right)+ \
& =w_3 \times \text { MCAge. }{\text { Age, Job }}\left(x_0\right)+ \
& =w_3 \times \text { MCAge. }{\text { Age, Gender }, \text { Job }}\left(x_0\right)
\end{aligned}

$A n d w_1+w_2+w_3+w_4=1$ + 权重 w 可以设定为同一行中边总数m的倒数 $\frac{1}{m}$ + 最终计算公式为: ![](https://media.xiang578.com/202307151652776.png) ## Ref + [理解用于计算SHAP值的公式 (baidu.com)](https://baijiahao.baidu.com/s?id=1654791131903418801&wfr=spider&for=pc)


Skip-Gram

目标:网络的多个输出之间的条件概率最大。

C 个输出概率分布相同,并且得分最高的单词不是一定是预测单词。

假设第 c 个输出的第 j 个分量为 $${u^c_j=w_j h_{u_j}^c}$$

yjc=p(wordjcX)=exp(ujc)k=1Vexp(ukc){y_j^c=p(word^c_j|\vec X)=\frac{exp(u^c_j)}{\sum^V_{k=1}exp(u^c_k)}}

{y^c_j}$$表示第 c 个输出中,词汇表 V 中第 j 个单词 $${word_j}$$ 为真实输出单词的概率。 损失函数定义 $$E = -\log \prod_{c=1}^{C} \frac{\exp \left(u_{j_{e}}^{c}\right)}{\sum_{k=1}^{V} \exp \left(u_{k}^{c}\right)}

{j^*_c}$$ 为输出单词序列对应于词典 V 中的下标序列。 每个网络的输出相同,化简得到: $$E=-\sum_{c=1}^{C} u_{j_{c}^{*}}^{c}+C \log \sum_{k=1}^{V} \exp \left(u_{k}\right)

^隐层的激活函数其实是线性的?^

skip gram 样本进行抽样:词频高的词(the)会在样本中大量出现,远远超过需要的训练样本数。

  • (三)通俗易懂理解——Skip-gram的负采样 - 知乎

  • 基本思想:对于我们在训练原始文本中遇到的每一个单词,它们都有一定概率被我们从文本中删掉,而这个被删除的概率与单词的频率有关。

  • 保留某个单词的概率 $$P\left(w_{i}\right)=\left(\sqrt{\frac{Z\left(w_{i}\right)}{0.001}}+1\right) \times \frac{0.001}{Z\left(w_{i}\right)}$$

    • Z wi 在语料中的词频

    • 0.001 越大代表有越大的概率被我们删除

    • threshold for configuring which higher-frequency words are randomly downsampled

+ x 代表 z,y 代表 p

  + z 小于 0.0026 100%保留

  + z = 0.00746 50%bclq

Spark API

SQL

  • Hive

  • 执行流程

+ SparkSqlParser

  + AST 语法树

    + 优化理论

+ Analyzer

  + 数据源绑定 & 字段类型确定

+ Optimizer

  + RBO 优化

+ SparkPlanner

  + 执行计划 Join 选择策略

Spark Streaming

MLlib

GraphX


Spark Operator

区分 RDD 的方法和 Scala 集合对象的方法

  • Scala 集合对象的方法在同一个节点的内存中完成

  • RDD 的方法可以将计算逻辑发送到 Executor 端执行

Transformation

  • map

  • mapPartitions

    • 映射函数的参数从 RDD 中的每一行元素变成 RDD 中每一个分区的迭代器

    • 一次函数调用会处理一个 partition 所有数据

      • 内存不够,可能会导致 OOM。
    • 解决映射过程中需要频繁创建额外的对象

  • mapPartitionsWithIndex

    • 多增加一个分区索引
  • sample

  • flatMap 先映射,再扁平化

  • filter

  • union 求并集

    • 多个 RDD 合并
1
2
3
4
5
6
7
8
rdd1 = sc.parallelize([1, 2, 3])
rdd2 = sc.parallelize([4, 5, 6])
rdd3 = sc.parallelize([7, 8, 9])

rdd = sc.union([rdd1, rdd2, rdd3])
rdd.collect()

## [1, 2, 3, 4, 5, 6, 7, 8, 9]
  • intersection 交叉口,求交集

  • distinct

  • groupby

    • 按 key 分组,value 合并(能相加就相加,不能加成为一个数组)
  • groupByKey

  • reduceByKey

    • 和 groupByKey
      的区别?

      • reduceByKey 会先在 map 端聚合,减少 reduce 端压力

      • 有时候使用 groupByKey 执行时间长,极易发生内存溢出

    • 如果 key 非常少,value 非常多,reduceByKey 会触发 shuffle 操作,可以先对数据进行一次 repartition

  • aggregateByKey

  • sortByKey

  • repartition

    • 实现原理 coalesce(numPartitions, shuffle = true)

    • 默认对数据进行 [[Spark Shuffle]]

  • partitionBy

    • 针对 RDD[(K, V)]

    • 按指定规则对数据进行重新分区

      • 默认分区器 HashPartitioner
  • repartitionAndSortWithinPartitions(partitioner: Partitioner)

    • 针对 repartition 重分区后进行排序的场景

    • 针对 RDD[(K, V)]

    • 传入 partitioner 分区

    • 对数据进行排序

  • 连接

    • join

    • leftOuterJoin()

    • rightOuterJoin()

  • join

  • cogroup

  • cartesian

  • pipe

  • coalesce

    • rdd.coalesce(numPartitions = 2, shuffle=false)

    • 调整 RDD 分区数量

      • 收缩合并分区,减少任务调度成本

      • 使用 coalesce 增加分区必定会导致数据倾斜

    • 为什么使用 coalesce 合并分区后会导致数据倾斜? #card

      • coalesce 没有对数据进行 [[Spark Shuffle]],原来属于同一分区的数据会同时进入一个新的分区
  • cache

Action:遇到一个 action 算子,提交一个 job

  • reduce

  • collect

  • show

  • first

  • take 取前几条记录

  • takeSmaple

  • takeOrdered 返回前 n 个元素,并按默认顺序排序。

  • count

  • countByKey

  • foreach

  • lookup 返回给定 key 对应的所有值

  • saveAsTextFile

  • saveAsSequenceFile

  • saveAsObjectFile

  • collectAsMap kypairs 以 map 形式保存到 driver 上,注意可能会超过 driver 的内存上限

KeyBy:指定 key,将 RDD 变成 key-value 格式


Spark Shuffle

shuffle 过程发生在不同 stage 之间

  • 前一个 stage 的 ShuffleMapTask 进行 shuffle write,把数据存储在 blockManager 上,把数据位置元信息上报到 driver 的 mapOutTrack 中

  • 后一个 stage 根据数据位置元信息,进行 shuffle read,拉取上个 stage 的输出数据

shuffle 操作必须要落盘,所以操作性能低

分布在多个节点的同一个 key,拉取到同一个节点上,进行聚合或 join 操作。

  • 相同的 key 会写到本地磁盘,然后其他节点通过网络传输拉取各个节点磁盘上相同的 key

  • 处理key过多,导致内存不够存放,进而溢写到磁盘文件中。

  • 大量磁盘文件读写 IO 以及数据网络传输

不同 ShuffleWriter

  • BypassMergeSortShuffleWriter

  • SortShuffleWriter

    • 聚合算子:边聚合边写入内存

    • 普通算子:直接写内存

  • UnsafeShuffleWriter

    • 序列化器KryoSerializer

    • 直接在 serialized binary data 上 sort 而不是 java objects,减少了 memory 的开销和 GC 的 overhead

触发 Shuffle 的操作

  • repartition 相关

    • repartition

    • coalesce

  • ByKey

    • groupByKey

    • reduceByKey

    • combineByKey

      • groupByKey 和 reduceByKey 的底层实现

      • 大概实现逻辑

        • 遇到新 key 执行 createCombiner

        • 遇到已有 key 执行 mergeValue

        • 对所有分区执行 mergeCombiners

    • aggregateByKey

  • join 相关

    • cogroup

    • join

[[Spark 调优]]

  • 减少 shuffle 次数

  • 必要时主动 shuffle 改变并行度

  • 使用 treeReduce & treeAggregate 替换 reduce & aggregate

[[Spark 数据倾斜]]

  • shuffle 默认使用 [[HashPartitioner]] 对数据进行分片,可能造成不同的 key 分配到一个 task 上

  • spark.default,parallelism 指定默认并行度


Spark 内存模块

运行在 JVM 体系上,内存模型基于 Java 虚拟机

堆、栈、静态代码块和全局空间

Executor

  • 申请内存包括下面两部分 M1+M2

+ OnHeap 堆内内存 spark.executor.memory

+ OffHeap 堆外内存 spark.yarn.executor.memoryOverhead

  + spark.memory.offHeap.size
  • Task Memory Manager

    • E 的线程共享 JVM 资源,没有强隔离

内存划分

  • Storage:RDD缓存、Broadcast 数据空间

  • Execution:Shuffle 过程使用的内存

    • 第一块是让task执行我们自己编写的代码时使用,默认是占Executor总内存的20%;

      • JVM
    • 第二块是让task通过shuffle过程拉取了上一个stage的task的输出后,进行聚合等操作时使用,默认也是占Executor总内存的20%;

      • 通过 spark.shuffle.memoryFraction 控制大小
    • 第三块是让RDD持久化时使用,默认占Executor总内存的60%。

      • persisit() 或 cache()

      • 通过 spark.storage.memoryFraction 控制大小

      • 超过限制,旧分区会被移除内存

  • Other:用户定义的数据结构、Spark 内部元数据


SparkSession

Spark 2.0 引入概念,为用户提供统一的切入点来使用 Spark

[[pyspark]] 例子

1
2
3
4
5
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("Word Count") \
.config(conf=c) \
.getOrCreate()

Scala 例子

  • 创建

    • val sparkSession = SparkSession.builder().appName(appName).enableHiveSupport().getOrCreate()
  • sql

    • sparkSession.sql(sqlStr)
  • HiveContext

    • spark sql 支持 hive 读写

    • new HiveContext(SparkSession)

  • SparkContext

    • sparkSession.sparkContext

Spark

[[Resilient Distributed Datasets A Fault-Tolerant Abstraction for In-Memory Cluster Computing]]

一个用来实现快速而通用的集群计算的平台

Spark 任务

  • 应用程序(Application): 基于Spark的用户程序,包含了一个Driver Program 和集群中多个的Executor;

  • 驱动(Driver): 运行Application的main()函数并且创建SparkContext;

  • 执行单元(Executor): 是为某Application运行在Worker Node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上,每个Application都有各自独立的Executors;

  • 集群管理程序(Cluster Manager): 在集群上获取资源的外部服务(例如:Local、Standalone、Mesos或Yarn等集群管理系统);

  • 操作(Operation): 作用于RDD的各种操作分为Transformation和Action.

Spark on yarn

  • yarn-cluster

  • yarn-client

  • 区别 Application Master 作业级别

    • 参数 --deploy-mode cluster/client

    • cluster 模式 driver 运行在 AM 中

      • 关掉 Client,作业会继续在 YARN 上运行,适合生产
    • client 本地运行,会和 container 进行通信。交互式查询和调试模式

      • Client 客户端不能退出

      • AM 向 YARN 请求 executor

spark 作业流程

    1. spark-submit 提交代码,执行 new SparkContext(),在 SparkContext 里构造 DAGScheduler 和 TaskScheduler。
    • jar 和 py 上传到 hdfs
    1. TaskScheduler 会通过后台的一个进程,连接 Master,向 Master 注册 Application。
    1. Master 接收到 Application 请求后,会使用相应的资源调度算法,在 Worker 上为这个 Application 启动多个 Executer。
    1. Executor 启动后,会自己反向注册到 TaskScheduler 中。 所有 Executor 都注册到 Driver 上之后,SparkContext 结束初始化,接下来往下执行我们自己的代码。
    1. 每执行到一个 Action,就会创建一个 Job。Job 会提交给 DAGScheduler。
    1. DAGScheduler 会将 Job划分为多个 stage,然后每个 stage 创建一个 TaskSet。
    1. TaskScheduler 会把每一个 TaskSet 里的 Task,提交到 Executor 上执行。
    1. Executor 上有线程池,每接收到一个 Task,就用 TaskRunner 封装,然后从线程池里取出一个线程执行这个 task。(TaskRunner 将我们编写的代码,拷贝,反序列化,执行 Task,每个 Task 执行 RDD 里的一个 partition)
    • 一个 stage 所有 task 执行完毕后,会在节点本地磁盘文件中写入中间结果。

RDD(Resilient Distributed Dataset) 即弹性数据集

Job action 算子划分

Stage 划分

  • 根据 RDD 之间的依赖关系,形成一个 DAG,DAGScheduler 遇到 宽依赖 wide dependency/shuffle
    就划分 stage

Task 最小执行单元

[[Spark Operator]]

运行时的一些概念

  • mapper

    • 加载数据源或[[Shuffle Write]]阶段Task数(默认256M split,数目>=文件个数)
  • reducer

    • Shuffle Read阶段Task数(默认spark.sql.shuffle.partitions=1000,由于开启了AE Shuffle 64M合并,实际数 目<=1000,union创建会N倍增加)
  • 任务并发数

    • 默认Executor数*Core数

Spark 划分逻辑图从而生成物理执行图

  • DAG 有向无环图

  • 从逻辑图最后方开始创建 Stage

  • 遇到完全依赖加入当前 Stage

  • 遇到部分依赖新建一个 Stage

Pipeline 的计算方式

  • Stage 内部操作只有完全依赖

  • 一个分区数据计算失败或者丢失,可以从父 RDD 对应的分区中恢复

[[Spark Shuffle]]

[[Spark 内存模块]]

[[Spark/Broadcast]] 数据共享

  • 广播变量:

    • 每个 Executor 节点上复制一份。各个节点可以直接访问本地数据进行计算而不需要通过网络获取。

    • 数据在 Driver 上分块,BlockManager 记录保存在那个节点

    • Executor 从Driver 上查询数据信息,并拉取。防止同时从 Driver 上拉取信息。

[[spark-submit]]

Spark 和 MapReduce 的区别?[[Question]]

  • [[Hadoop]]一个 task 启动一个进程

  • MapReduce 过于抽象,高级 API (SQL vs. pandas numpy)

  • shuffle 的数据集不需要通过读写磁盘来交换,直接保存在内存中。

  • Hadoop 多轮作业之间无交互,磁盘文件进行数据交互

  • [[Scala]] 实现

    • task 如何通过序列化方法发送到远端

    • 运行在 JVM 虚拟机上

[[Spark API]]

Ref


Spark/Broadcast

sc.Broadcast(rdd.collectAsMap())

算子函数使用外部变量,默认情况 Spark 会将该变量复制多个副本,通过网络传输到 task 中,每个 task 都有一个变量副本。

  • 如果变量本身比较大,会占用增大网络中传输的性能开销,以及在各个节点的 Executor 占用过多内存导致频繁 GC。

  • 通过 Broadcast 的变量只在 Executor 内存中保留一份。

    • Executor 会有对应的 BlockManager,BlockManager 负责管理 Executor 对应的内存和磁盘上的数据。

    • 需要使用广播变量时,先尝试从 BlockManager 获取。如果失败, BlockManager 会从 Driver 或者 其他节点的 BlockManager 拉取变量副本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 以下代码在算子函数中,使用了外部的变量。
// 此时没有做任何特殊操作,每个task都会有一份list1的副本。
val list1 = ...
rdd1.map(list1...)

// 以下代码将list1封装成了Broadcast类型的广播变量。
// 在算子函数中,使用广播变量时,首先会判断当前task所在Executor内存中,是否有变量副本。
// 如果有则直接使用;如果没有则从Driver或者其他Executor节点上远程拉取一份放到本地Executor内存中。
// 每个Executor内存中,就只会驻留一份广播变量副本。
val list1 = ...
val list1Broadcast = sc.broadcast(list1)
rdd1.map(list1Broadcast...)

//如果是变量是 hdfs 文件,先 collect
sc.broadcast(link2NodeMap.collectAsMap())

Spectral Networks and Deep Locally Connected Networks on Graphs

基于空域的卷积构建 Spatial Construction

  • 直接在原始图结构上执行卷积

    • 考虑 CNN 的空间局部性、多尺度特点

+ 方法

  + 按照什么条件去找中心vertex的neighbors,也就是如何确定receptive field?

    + vertex domain(spatial domain),找出每个顶点相邻的 neighbors

    + 根据顶点的领域进行简单的聚类

  + 确定receptive field,按照什么方式处理包含不同数目neighbors的特征?

    + 卷积操作

      + $\overrightarrow{\mathbf{o}}_{j}=\sum_{i \in \mathcal{N}_{\delta}(j)} F_{i, j} \overrightarrow{\mathbf{x}}_{i}$

        + $F_{i,j}$ 是卷积核

    + 非线性层

    + 聚类

      + 通过聚类算法将 $d_{k-1}$ 个顶点聚成 $d_k$ 个簇

    + 池化层 [[Pooling]]

      + 如何根据簇内顶点向量计算每个簇的向量表示,常用有均值池化、最大池化

+ 缺点

  + 每个顶点提取出来的neighbors不同,使得计算处理必须针对每个顶点

    + 每一层降低空间分辨率,增加空间通道数

  + 提取特征的效果可能没有卷积好

+ 例子

  + 第 0 层,12个顶点,一个通道

  + 第 1 层, 6个顶点,4个通道

  + 第 2 层,3 个顶点,6个通道
  • 特点

    • 不需要对图结构有很高的规整性假设 regualryity assumption

    • 无法在顶点之间共享权重。

基于谱域的卷积构建 Spectral Construction

  • 对图结构进行傅里叶变化,在谱域进行卷积。

  • youtput =σ(Ugθ(Λ)UTx)y_{\text {output }}=\sigma\left(U g_{\theta}(\Lambda) U^{T} x\right)

    • gθ(Λ)=diag(θi)g_{\theta}(\Lambda) = diag(\theta _i) 是卷积核
  • (fh)G=U(h^(λ1)h^(λn))UTf(f * h)_{G}=U\left(\begin{array}{lll}\hat{h}\left(\lambda_{1}\right) & & \\ & \ddots & \\ & & \hat{h}\left(\lambda_{n}\right)\end{array}\right) U^{T} f
    中间项变成卷积核 diag(θl)diag(\theta _l)

  • 问题

    • 卷积空间 局部性
      不好

    • 计算复杂度高,需要对拉普拉斯矩阵进行谱分解求解 U 以及 Ugθ(Λ)UTUg_{\theta}(\Lambda) U^{T} 的乘积

    • 每个卷积核需要 n 个参数


Standardization

标准化的前提假设

  • 数据的权重相同

  • 某些算法默认数据的 std=1 mean=0

不适合情况

  • 类型不合适,类别变量

  • 压缩的数据,稀疏矩阵

什么数据适合标准化?

  • SVM RBF

  • L1 L2 规则化的线性模型

标准化后损失什么信息?

  • 原来的均值和标准差信息

  • 含有极端异常点的删u

标准化 [[Standardization]]

  • z-score 规范化

    • 将数值范围缩放到0附近, 但没有改变数据分布。

    • z=xμσz=\frac{x-\mu}{\sigma}

  • 对数据的分布的进行转换,使其符合某种分布(比如正态分布)的一种非线性特征变换

  • 消除数量级对于模型的影响。

  • 线性模型中,需要学习一条直线区分数据,将原始数据分布中心移动后,只是移动直线。不加正则的情况下。

什么时候需要标准化

  • 主要看模型是否具有伸缩不变性。

  • 有些模型在各个维度进行不均匀伸缩后,最优解与原来不等价,例如SVM。对于这样的模型,除非本来各维数据的分布范围就比较接近,否则必须进行标准化,以免模型参数被分布范围较大或较小的数据dominate。

  • 有些模型在各个维度进行不均匀伸缩后,最优解与原来等价,例如logistic regression。对于这样的模型,是否标准化理论上不会改变最优解。但是,由于实际求解往往使用迭代算法,如果目标函数的形状太“扁”,迭代算法可能收敛得很慢甚至不收敛。所以对于具有伸缩不变性的模型,最好也进行数据标准化。


Static Covariate Encoders

静态协变量编码器 Static Covariate Encoders
ls-type:: annotation
hl-page:: 8
hl-color:: yellow
#card

  • 将静态特征集成到网络中,通过对上下文向量进行编码以调节时间动态。 integrate static features into the network, through encoding of context vectors to condition temporal dynamics.
    ls-type:: annotation
    hl-page:: 6
    hl-color:: yellow

使用单独的 GRN 编码器生成四个不同的上下文向量 separate GRN encoders
ls-type:: annotation
hl-page:: 8
hl-color:: yellow
#card

  • temporal variable selection (cs)
    ls-type:: annotation
    hl-page:: 9
    hl-color:: yellow
    [[Variable Selection Networks]]

  • local processing of temporal features (cc, ch)
    ls-type:: annotation
    hl-page:: 9
    hl-color:: yellow
    给 ((64301fb9-b177-436f-a199-5bba7709483c)) 做初始化状态

  • enriching of temporal features with static information (ce)
    ls-type:: annotation
    hl-page:: 9
    hl-color:: yellow
    给 ((64301e1f-6da6-4af4-ac64-ec89e3c99ea4))


Stop Taking Regular Notes Use a Zettelkasten Instead

Here’s how a Zettelkasten works:

  • Write each idea you come across on a card

  • Link idea cards to other relevant idea cards (idea -> idea link)

  • Sort cards into broader topic boxes (idea -> topic link)

Literature notes

  • Add useful docs (papers, books) as a literature note

  • Metadata includes: literaturenote tag, source, author

  • Summarise content, each key idea as a simple sentence

  • Elaborate on each key idea with some bullet points

Permanent notes

  • 写 Permanent notes 的两条标准

    • Would I explore this further?

    • Or can I connect this to other ideas?

  • Permanent notes 的 metadata

    • permanentnote tag

    • topic tags

    • Source,literature note link

    • relevant permanent notes and short explanation of how it is relevant

    • Add summary in prose

Topics

  • This comes free if you’ve been adding topic tags

  • You can now jump into topics via tags and navigate via links of relevant permanent notes

具体实践可以参考


T-Learner

image.png

  • 训练模型方式 #card

    • 将控制组样本和干预组样本分别用于训练模型 M0M_0M1M_1 (Two,T 的由来),分别学习 M0(X)=E(YT=0,X)M_0(X) = E(Y|T=0,X)M1(X)=E(YT=1,X)M_1(X) = E(Y|T=1,X)
  • 如何预测 #card

    • 在预测时对于同一份样本分别经过 M0M_0M1M_1 ,最终的 CATE 估计为 τ^(x)i=M1(Xi)M0(Xi)\hat{\tau}(x)_i=M_1(X_i)-M_0(X_i)
  • 优点:#card

    • 对干预组 / 控制组样本分别建模,充分考虑了干预变量的影响。
  • 缺点:#card

    • 两个模型训练 bias 不一致,容易有累积误差

    • 干预组样本较少可能导致 M1M_1 过拟合,因此只能降低 M1M_1 的复杂度,这会导致 M1M1M2M_2 存在差异,影响最终的因果效果估计准度。

    • 对于拥有较多 ID 类特征,或者连续特征离散化,采用了 Embedding Layer,可以参考多任务学习的架构,共享底层 Embedding 参数,仅对上层 DNN 参数独立学习,这样可以利用控制组样本的信息。


TCN

  • TCN 中输入和输出可能有不同的宽度,c 图表示使用 11 卷积调整输入大小

    • 也可以直接通过 zero padding 来增加 channels

TCN = 1D FCN + causal convolutions

特点

  • 使用因果卷积,不会泄漏未来信息。

    • 论文中强调和 RNN 之类方法进行对比,所以要考虑因果。
  • 可以取任意长度的序列,并将其映射到相同长度的输出序列。

  • 引入 [[ResNet]] 和扩张卷积的组合可以将网络做深以及增加感受野。

细节

  • tcn 中没有 pooling 层

  • normalization 方法是 weight norm,更适合序列问题

增加感受野的方法

  • 更大的 kernel_size (增加参数,卷积核大效果差,卷积核过大会退化成一个全连接层)

  • [[空洞卷积]]

时序问题

    1. 输入和输出矩阵大小相同
    1. 不能使用没有发生时刻的信息,因果卷积

[[ETA 模型]] 实现

  • tf.nn.conv1d(input, filters, stride, padding, data_format='NWC', dilations=None, name=None)

SuperMemo

创始人 [[Piotr Wozniak]]

创新

  • 记忆算法 [[Spaced Repetition]] (始于 SuperMemo 1 (1987))

  • 渐进阅读 [[Incremental Reading]] (始于 SuperMemo 10 (2000))

    • 记忆质量太差,
  • 优先级队列(始于 SuperMemo 13 (2006))
    记忆价值

概念

  • it: item

  • top: topic

使用

  • Mac 使用虚拟机 [[VMware Fusion Pro]] 运行软件

  • [[Incremental Reading]]

    • 网页

      • 直接复制文字或使用[[简悦]]导出(不能包含 CSS)

      • 在 IE 中打开需要导入网页,「编辑 - 导入网页」

      • split the article

    • epub

      • 导入

        • 修改后缀名为 .zip

        • 解压对应的压缩包

        • 使用 ie 打开网页,导入材料

    • PDF

      • Python 包 PyMuPDF

      • 使用脚本提取 pdf 文件中的大纲

      • sm 中使用导入网页的方法导入大纲,然后分割成多个卡片

      • 使用 split 命令分割 <p>

      • Learning-Add all to outstanding

Tasklist

Sleep Chart

资源


TFT Interpretability Use Cases

以往基于 attention 进行神经网络解释的方法,侧重于用注意力权重对特定样本的解释。当前方法聚焦如何汇总整个数据集中的模式 #card

  • In contrast to other examples of attention-based interpretability [25, 12, 7] which zoom in on interesting but instance-specific examples, our methods focus on ways to aggregate the patterns across the entire dataset – extracting generalizable insights about temporal dynamics.
    ls-type:: annotation
    hl-page:: 17
    hl-color:: red

检查每个变量对预测的重要性 Analyzing Variable Importance
ls-type:: annotation
hl-page:: 17
hl-color:: yellow
[[Feature Importance]] #card

  • 通过分析特征在 [[Variable Selection Networks]] 中的权重大小 (同时考虑 10th,50th,90th 分位数)

  • 结果

    • Static Covariates 可以区分不同物品的特征权重大

      • the largest weights are attributed to variables which uniquely identify different entities (i.e. item number and store number).
        ls-type:: annotation
        hl-page:: 18
        hl-color:: yellow

      • [:span]
        ls-type:: annotation
        hl-page:: 18
        hl-color:: yellow

    • Past Inputs 目标(log sales)是关键,预测是对过去观察结果的外推

      • past values of the target (i.e. log sales) are critical as expected, as forecasts are extrapolations of past observations
        ls-type:: annotation
        hl-page:: 18
        hl-color:: yellow

      • [:span]
        ls-type:: annotation
        hl-page:: 18
        hl-color:: yellow

    • Future Inputs 促销和公共假日比较重要

      • [:span]
        ls-type:: annotation
        hl-page:: 18
        hl-color:: yellow
  • 识别相似的持续模式 identify similar persistent patterns
    ls-type:: annotation
    hl-page:: 19
    hl-color:: red

    • id:: 64400143-1db4-4724-96fb-b0dcf203664a

可视化持续时序模式 Visualizing Persistent Temporal Patterns
ls-type:: annotation
hl-page:: 20
hl-color:: yellow
#card

  • 把不同分位数损失下的自注意力层权重(或均值)绘制出来。

  • 结论

    • 前三个数据集上,自注意力层的权重值都表现出了于数据特征相符的周期性

识别重大事件 Identifying Regimes & Significant Events
ls-type:: annotation
hl-page:: 20
hl-color:: yellow
#card

  • 用注意力的相异度(距离)来判断是否有重大事情发生

  • regime-switching behavior
    ls-type:: annotation
    hl-page:: 20
    hl-color:: red
    [[regime switching model]]

    • 随着回报特征(波动性)被观察到在不同的制度之间突然变化 with returns characteristics – such as volatility – being observed to change abruptly between regime
      ls-type:: annotation
      hl-page:: 20
      hl-color:: green

    • 识别这样的转变为寻找显著事件提供洞见 identifying such regime changes provides strong insights into the underlying problem which is useful for identification of the significant events.
      ls-type:: annotation
      hl-page:: 20
      hl-color:: yellow

  • 结论

    • 波动性特征大的时候,注意力的相异度的值也特别大。

Temporal Fusion Transformer的可解释性 - 知乎 (zhihu.com)

  • [[@“Why Should I Trust You?”: Explaining the Predictions of Any Classifier]] 2016 年 KDD #card

    • LIME Local Interpretable Model-Agnostic Explanations 提供一种与模型无关的方法,使用可解释的模型和可解释的特征,局部达到和复杂模型相似的效果。
  • [[SHAP]] 从博弈论角度考虑,特征如何影响原始模型的预测值。

[[TFT 关键实验]]


Tabular Data

表格类数据模型 Ref1 #XXX


Tanh

f(z)=tanh(z)=ezezez+ezf(z)=tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}

图像

image.png


Temporal Fusion Decoder

Temporal Fusion Decoder
ls-type:: annotation
hl-page:: 10
hl-color:: yellow

Locality Enhancement with Sequence-to-Sequence Layer
ls-type:: annotation
hl-page:: 10
hl-color:: yellow
在 TFD 前用 [[Seq2Seq]] 对数据进行一次增强 #card

  • 重要的点通常是与周围的值相关系来确定的,例如异常值、变化点或周期模式 points of significance are often identified in relation to their surrounding values – such as anomalies, change-points or cyclical patterns.
    ls-type:: annotation
    hl-page:: 10
    hl-color:: yellow

  • 注意力机制架构中构建利用 point-wise values 的特征可以实现性能提升

    • [[@Enhancing the Locality and Breaking the Memory Bottleneck of Transformer on Time Series Forecasting]] single convolutional layer for locality enhancement
      ls-type:: annotation
      hl-page:: 10
      hl-color:: green
  • LSTM encoder-decoder

    • encoder 输入 ξ~tk:t\tilde{\boldsymbol{\xi}}_{t-k: t} 前 k 步特征

    • decoder 输入 ξ~t+1:t+τmax\tilde{\boldsymbol{\xi}}_{t+1: t+\tau_{\max }} 未来 tao 步特征

    • 由 encoder 和 decoder 生成的时序特征可表示为 ϕ(t,n){ϕ(t,k),,ϕ(t,τmax)}\phi(t, n) \in\left\{\boldsymbol{\phi}(t,-k), \ldots, \boldsymbol{\phi}\left(t, \tau_{\max }\right)\right\}

      • 其中 n 为位置索引
    • 时序特征输入到 TFD 前的在经过一次非线性变换

      • ϕ~(t,n)=LayerNorm(ξ~t+n+GLUϕ~(ϕ(t,n)))\tilde{\boldsymbol{\phi}}(t, n)=\operatorname{LayerNorm}\left(\tilde{\boldsymbol{\xi}}_{t+n}+\operatorname{GLU}_{\tilde{\phi}}(\boldsymbol{\phi}(t, n))\right)

Static Enrichment Layer
ls-type:: annotation
hl-page:: 10
hl-color:: yellow
用静态变量增强时序特征 #card

  • 静态协变量通常对时间动态有重要影响 static covariates often have a significant influence on the temporal dynamics
    ls-type:: annotation
    hl-page:: 10
    hl-color:: yellow

  • θ(t,n)=GRNθ(ϕ~(t,n),ce)\boldsymbol{\theta}(t, n)=\operatorname{GRN}_\theta\left(\tilde{\boldsymbol{\phi}}(t, n), \boldsymbol{c}_e\right)

    • ce is a context vector from a static covariate encoder
      ls-type:: annotation
      hl-page:: 10
      hl-color:: yellow

自关注模块 Temporal Self-Attention Layer
ls-type:: annotation
hl-page:: 11
hl-color:: yellow
学习时序数据的长期依赖关系并提供模型可解释性 #card

  • [[Interpretable Multi-Head Attention]],每个 head 使用相同的 QW,然后用多头 attention score 加权平均后的 V 做解释

    • B(t)=\boldsymbol{B}(t)= InterpretableMultiHead (Θ(t),Θ(t),Θ(t))(\boldsymbol{\Theta}(t), \boldsymbol{\Theta}(t), \boldsymbol{\Theta}(t))
  • δ(t,n)=LayerNorm(θ(t,n)+GLUδ(β(t,n)))\boldsymbol{\delta}(t, n)=\operatorname{LayerNorm}\left(\boldsymbol{\theta}(t, n)+\operatorname{GLU}_\delta(\boldsymbol{\beta}(t, n))\right).

Position-wise Feed-forward Layer
ls-type:: annotation
hl-page:: 11
hl-color:: yellow
对自关注层的输出应用额外的非线性处理公式 #card

  • ψ(t,n)=GRNψ(δ(t,n))\boldsymbol{\psi}(t, n)=\operatorname{GRN}_\psi(\boldsymbol{\delta}(t, n))

  • ψ~(t,n)=LayerNorm(ϕ~(t,n)+GLUψ~(ψ(t,n)))\tilde{\boldsymbol{\psi}}(t, n)=\operatorname{LayerNorm}\left(\tilde{\boldsymbol{\phi}}(t, n)+\operatorname{GLU}_{\tilde{\psi}}(\boldsymbol{\psi}(t, n))\right)


TiddlyWiki

缺点

  • 适合多人编辑? 没有考虑过这个问题

  • 没有服务器,无法在线编辑? 自己部署

  • 数据无法导出?

  • 上次考虑 wiki 方案时最终因为无法支持 markdown 而被放弃,单文件天然不靠谱。

第三次 :-> 是这个世界上最后一个记得你的人,把你忘记,于是,你就真正的死去,整个宇宙都不再和你有关。

入门以及进阶手册 Grok TiddlyWiki — Build a deep, lasting understanding of TiddlyWiki

版本

See Also


Transformer 和 LSTM 对比

RNN 为了解决不定长输入,LSTM 的三个门结构为了解决标准 RNN 的梯度爆炸和长序列信息消失问题

硅谷谷主

  • [[self-attention]] 用句子中有所单词向量的加权和来代表某一个单词的向量。

Transformer 缺乏时间维度建模,通过 [[Positional Encoding]] 也和 LSTM 这种天然的时序网络有差距。

  • 缺乏时间维度建模导致深层 Transformer 编码器的每个位置输出都会很相似(每一层不断在上一层的基础上加权和)

Transformer 效果表现好建立在预训练的基础上,单独训练 Transformer 需要大量技巧

  • 编码器层数,attention head 数量,学习率,权重衰减

Traffic Flow Forecasting

[[Graph Neural Network for Traffic Forecasting: A Survey]]

[[Traffic Flow Forecasting with Spatial-Temporal Graph Diffusion Network]]

[[Spatial-Temporal Fusion Graph Neural Networks for Traffic Flow Forecasting]]

[[Spatial-Temporal Transformer Networks for Traffic Flow Forecasting]]

[[Attention Based Spatial-Temporal Graph Convolutional Networks for Traffic Flow Forecasting]]

[[Spatial-Temporal Identity: A Simple yet Effective Baseline for Multivariate Time Series Forecasting]]

[[T-GCN]]


Transformer 是否适合时间序列预测

Transformer是否真的适合解决时序预测问题 - 知乎 (zhihu.com)

  • [[Autoformer]] #card

    • 一类方法是否适用于某个问题,主要取决于两者的[[归纳偏置]]是否相匹配

    • 标准 Transformer 实现的是点到点的特征融合,这种离散的方式其实是忽略了时间序列连续性。

    • 基于自相关理论将 Transformer 扩展到序列到序列的特征融合

  • [[MTGNN]]

  • [[TPA-LSTM]]

Transformer是否适合用于做非NLP领域的时间序列预测问题? - 知乎 (zhihu.com) [[2023/03/05]]

  • 吴海旭

    • 一类方法是否适用于某个问题,主要取决于两者的[[归纳偏置]]是否相匹配
      #card

      • RNN

        • 对序列依赖马尔可夫假设

        • 序列维度参数共享,天然可以处理变长数据

      • Transfomr

        • 注意力机制处理变长数据

        • 点点时序链接建模长期依赖

      • 线性模型

        • 不具备处理变长数据的能力

        • 模型参数量随着长度增加而增加

    • [[@Non-stationary Transformers: Exploring the Stationarity in Time Series Forecasting]] 非平稳时间序列预测

  • 科研汪老徐

    • [[@Are Transformers Effective for Time Series Forecasting?]] transformer 类方法短时预测效果差,所以强调长时预测,然后对比的 baseline 是自回归模型,由于错误累积,长时预测效果差。#card

      • 我们不相信如果一个模型对短时预测都做不好,对长时预测却得心应手,毕竟这两个问题都是从同一段历史数据里提取时序特征来做的预测。
    • 此外,我们也并不认为时序预测这个问题有必要考虑变长数据,也因此应该使用Transformer这类支持对变长数据进行建模的架构。#card

      • 反过来想一下,如果一个模型能同时处理各种长度的历史数据,至少说明这些不同长度之间的时序信息在建模过程中是丢失的。
    • SCINet CNN 提取时序特征

    • self-attention 机制上是 anti-ordering 的,与时间序列建模的目的恰好是矛盾的。#card

      • [[Informer]] 从实验结果来看,原生Informer的效果最差,原因也很简单,raw data除了大小没有什么时序的语义信息,对原始数据通过self-attention提取点对点的所谓correlation毫无意义。Informer中真正起了点儿作用的是对时间直接做些编码的部分,不过也作用有限。
    • [[PatchTST]] 我们一直质疑的是attention对于提取时序信息的意义,文中的Patch内部使用linear来提取feature,这部分跟我们的做法类似。#card

      • 直觉上来讲,学习不同patch之间的关系对大多数时间序列意义不大,可以做个ablation study看看attention是否真的起到了作用,i.e.,跟去掉attention后的两层Linear结构比较一下。此外,文中缺省使用了RIN来降低distribution shift带来的影响,跟NLinear的结果比较会相对合理一些。

      • RIN 对抗distribution shift的normalization方法 [[@Reversible Instance Normalization for Accurate Time-Series Forecasting against Distribution Shift]]

  • 的泼墨佛给克呢 - 知乎 (zhihu.com)

    • 是真的,informer设计了一大堆花里胡哨的,看起来很有道理,实际上用起来真的不太行。#card

      • 而且我发现,他们这些transformer的模型,在ETT数据集(只有7个变量)上,d_model设置为512,都快赶上nlp领域常设的768了,这也太离谱了。

      • 按理说,只有7个变量,用这么大的模型(虽然层数较少)太扯了

    • 而且那个pyraformer是真的没啥特别突出的地方,不知道咋能中oral。。。#card

      • 我做过实验,就是在输出的时候把变量维度和时间维度统一拼接经过线性层,这样确实能效果好,

      • 我觉得他的效果有提升就是因为这个,但这样得到的线性层是非常非常大的,参数甚至比transformer本身都多,不知道有啥意义。。。最近他的代码开源了,可以看看他是怎么实现的


Transformer/why self-attention

通过计算复杂度、并行操作数、最长学习距离三个方面来对比 Transformer、CNN、RNN。

计算复杂度就是模型中浮点计算次数

CNN 中的最长学习距离是通过[[空洞卷积]]实现

  1. 训练效率低下,self-attention 可以并行计算。

  2. 长距依赖问题,self-attention 可以忽视不同 token 之间的距离。


UPlift Model

根据 [[营销人群四象限]],应该针对 TR 人群进行营销活动。

Uplift 干预和不干预的差值

  • 响应模型 Response Model,预测干预情况下用户是否购买

    •  Outcome =P( buy  treatment )\text { Outcome }=P(\text { buy } \mid \text { treatment })
  • uplift 通过干预和不干预的反事实来预估计算因果效应

    •  Lift =P( buy  treatment )P( buy  no treatment )\text { Lift }=P(\text { buy } \mid \text { treatment })-P(\text { buy } \mid \text { no treatment })

    • τ=Y(1)Y(0)\tau=Y(1)-Y(0)

  • 样本服从CIA ( [[Conditional Independence Assumption]] ) 条件独立假设

τ=Y(1)Y(0)\tau=Y(1)-Y(0) 通过随机对照实验收集数据:实验组全部干预,对照组都不干预。

  • 利用条件平均因果效应[[CATE]]来预估给定条件下用户群体的平均因果效应

    • τ=E[Y(1)Y(0)X]=E[Y(1)X]E[Y(0)X]=E[Y(1)T=1,X]E[Y(0)T=0,X]\begin{aligned} \tau & =E[Y(1)-Y(0) \mid X] \\ & =E[Y(1) \mid X]-E[Y(0) \mid X] \\ & =E[Y(1) \mid T=1, X]-E[Y(0) \mid T=0, X]\end{aligned}
  • 利用一个人群的条件平均因果效应去近似个体因果效应

核心问题

  • 混杂因素偏置 Confounding Bias

    • 干预机制导致选择偏差
  • 归纳偏置

    • CATE 干预打分-非干预打分差值

模型方案

image.png

  • 多目标 uplift 模型

image.png

[[Uplift Model 评估]] 不可能同时观察到同一个用户在不同干预策略下的响应,即使无法获取用户真实增量,无法用常规分类和回归问题的评估指标。

  • 通过划分十分位数来对齐实验组和对照组数据去进行间接评估

  • [[Qini curve]]

  • [[AUUC]]


Tweedie Loss

L(y^)L(\hat{y}) = :-> yy^1p1p+y^2p2p,1<p<2{ - y \frac{\hat{y}^{1-p}}{1-p} + \frac{\hat{y}^{2-p}}{2-p}, 1<p<2}
特点

  • 非高斯分布

  • y = 0,如果预测结果不为 0 ,会有损失

  • 应用场景

    • 奢侈品销售或者电商销售,大部分是浏览不购买,导致 0 处值非常大。

    • 如果正负样本比例差异大,但是数量充足还是可以训练。

      • 这是回归问题,取值是连续的……
    • 如果直接下采样,会破坏分布

    • 回到之前 回归问题使用什么损失函数由数据分布决定
      的问题,决定为什么会有这个损失函数

Question

  • 一般什么情况下使用 Tweedie Loss L(y^)L(\hat{y}) = :-> yy^1p1p+y^2p2p,1<p<2{ - y \frac{\hat{y}^{1-p}}{1-p} + \frac{\hat{y}^{2-p}}{2-p}, 1<p<2}
    ? #card
    • 奢侈品销售或者电商销售,大部分是浏览不购买,导致 0 处值非常大。

    • 如果直接下采样,会破坏分布

Ref


Unsupervised Learning

核心思想

  • 大量无监督数据训练特征提取器

如何构建 ground truth

  • 代理任务生成标签

  • 代理任务生成监督信号,充当标签信息


VS Code/setting

软换行 :-> Editor:Word Wrap on 是打开换行
设置 git path

  • "git.path": "/mnt/workspace/shengxin/git"

Variable Selection Networks

变量选择网络 Variable Selection Networks
ls-type:: annotation
hl-page:: 7
hl-color:: yellow

image.png

  • 作用 :-> 每一个时间步选择相关的输入变量 select relevant input variables at each time step
    ls-type:: annotation
    hl-page:: 6
    hl-color:: yellow

  • ξ~t=j=1mχvχt(j)ξ~t(j)\tilde{\boldsymbol{\xi}}_t=\sum_{j=1}^{m_\chi} v_{\chi_t}^{(j)} \tilde{\boldsymbol{\xi}}_t^{(j)} #card

    • 时间点 t 有 mxm_x 个变量,类别变量和连续变量都转换成 dmodeld_{model} 维度

    • 非线性处理后特征 ξ~t(j)=GRNξ~(j)(ξt(j))\tilde{\boldsymbol{\xi}}_t^{(j)}=\operatorname{GRN}_{\tilde{\xi}(j)}\left(\boldsymbol{\xi}_t^{(j)}\right)

      • 变量有单独 GRN,所有时间步中共享

      • ξt(j)Rdmodel \boldsymbol{\xi}_t^{(j)} \in \mathbb{R}^{d_{\text {model }}},时间 t 第 j 个变量

  • #card 特征选择的权重 a vector of variable selection weights
    ls-type:: annotation
    hl-page:: 8
    hl-color:: yellow
    vχt=Softmax(GRNvχ(Ξt,cs))\boldsymbol{v}_{\chi_t}=\operatorname{Softmax}\left(\operatorname{GRN}_{v_\chi}\left(\boldsymbol{\Xi}_t, \boldsymbol{c}_s\right)\right)

    • 历史输入序列 Ξt=[ξt(1)T,,ξt(mχ)T]T\boldsymbol{\Xi}_t=\left[\boldsymbol{\xi}_t^{(1)^T}, \ldots, \boldsymbol{\xi}_t^{\left(m_\chi\right)^T}\right]^T

    • ξt(j)Rdmodel \boldsymbol{\xi}_t^{(j)} \in \mathbb{R}^{d_{\text {model }}} j-th varaible at time t

    • csc_s [[Static Covariate Encoders]] 结果

  • 针对静态、过去和未来输入,分别用 不同 的 VSN


Web Traffic Time Series Forecasting 1st place solution

[[Feature Engineering]]

  • 局部特征

    • 当发现有一个趋势,希望趋势持续。自回归模型

    • 当发现一个流量高峰,高峰逐渐衰减。[[移动平均]]

    • 当发现节假日流量高,期望未来的节假日流量都会高。季节性

  • 全局特征

    • 按年、按月有很强的 [[自相关]]

      • y轴是自相关系数,90 天和 365 天的系数比较大

  • 具体实现:尽可能减少特征工程,通过模型发现和学习特征

    • 浏览量

      • 通过对数转换变成正态分布
    • day of week

    • year to year autocorrelation quarter-to-quarter autocorrelation

    • page popularity 区分高频页面和低频页面

      • This scale information is lost in a pageviews feature, because each pageviews series independently normalized to zero mean and unit variance.

      • 流量中位数

    • lagged pageviews

Feature preprocessing

  • 数据采样(数据增强)

    • 600 天数据,固定训练样本长度 200 天,有 400 天可以做为起点。

模型

  • 为什么使用 RNN 模型

    • 比统计学时间序列模型[[ARIMA]]更灵活有效

    • 非参数化方法

  • DONE 为什么两个 GRU 不一样?

    • Encoder

      • cuDNN GRU

      • 输入 256,284,267 batch,time,features

      • 输出 283,256,267 time batch features

    • Decoder

      • GRUBlockCell

        • tf.whil_loop()

        • 支持将上一步输入加入到当前步输入


tags:: #[[Model Architecture]] [[Encoder-Decoder]] [[Seq2Seq]] [[GRU]]

解决长时间序列(700天)依赖

  • LSTM/GRU 预测限制:100-300 items

  • [[Attention]] 能带来远处过去信息。fixed-weight sliding-window attention

    • 效果不稳定

+ 取过去重要节点的编码器输出,用 FC 压缩维度,加到解码器的输入特征中

  + 减少 noise 进行平滑:`attn_365 = 0.25 * day_364 + 0.5 * day_365 + 0.25 * day_366`

  + 利用 1D CNN 计算平滑的权重
  • ^^lagged datapoint 滞后数据特征^^ [[lag feature]]

    • 捕捉固定周期的历史信息

    • 将每个日期对应前四个季度的数据输入到解码器中

Losses and regularization

  • [[SMAPE]] 解决预测值和真值都接近 0 的情况
1
2
3
epsilon = 0.1
summ = tf.maximum(tf.abs(true) + tf.abs(predicted) + epsilon, 0.5 + epsilon)
smape = tf.abs(predicted - true) / summ * 2.0

Reducing model variance

  • 使用不同种子训练 3 个模型,每次训练在 10500-11500 区间保存 10 个 checkpoints,最后预测合并。

    • 无法知道如何 early stopping
  • SGD averaging (ASGD) SGD + 动量

  • 相当于[[bagging]] 模型

Hyperparameter tuning

Ref


Weight Decay

θt+1=(1λ)θtαft(θt)\theta_{t+1}=(1-\lambda)\theta_t-\alpha \nabla f_t(\theta_t)

  • λ\lambda 是 weight decay 的系数 ,减少参数的值,调节模型复杂度对损失函数的影响

SGD 中权重衰减相当于加入一个 L2 regularization (对损失函数求导,然后化简)

  • [[L2 Regularization]] 的目的就是为了让权重衰减到更小的值,在一定程度上减少模型过拟合的问题

为什么能避免模型过拟合问题?

  • 过拟合模型的系数往往非常大,因为过拟合就是需要顾忌每一个点,最终形成的拟合函数波动很大,这意味着在某些小区间里的导数值非常大,也就是系数很大,通过正则化约束参数的范围使其不要太大,可以在一定程度上减少过拟合情况。

Ref


X - Daily Process

Day Open 模板 #card

  • Gratitude 感激

  • Daily Tasks

  • Daily Journal

    • 深度工作标签 X - Curate

      • 番茄钟 + 记录需要在 25 分钟内完成的事情 + 结果
  • Reading

image.png

Day Close 模板 #card

  • First Thing 记录明天最重要的事情,做明天的 time box

image.png

Process Steps #card #incremental

  • First thing you do… open Daily Notes page and paste in Day Open Smart Block 首先,打开每日笔记页面并粘贴到“Day Open Smart Block”。

  • Track your daily activities under the journal as per the suggestion. 根据建议在日记中记录您的日常活动。

  • At the end of the day you MUST close out. Paste in Day Close Smart Block 在一天结束时,您必须进行结算。粘贴到日结智能块中。

    • Review Inbox and follow Task Management process

    • Complete Daily Thoughts and Daily Accomplishments

    • Open the Weekly Plan in the sidebar and TIME BLOCK the following day


X-Learner

[[X-Learner ppt]]
X-Learner 基于 T-Learner 而改进点 #card

  • 一是针对当干预组样本较少时 T-learner 预测不准,

  • 二是针对 S/T-Leaner 都不是直接预测因果效应。

image.png

  • 分为两个阶段:

  • X-Learner第一阶段#card

    • 和 T-Learner 一样,将控制组样本和干预组样本分别用于训练模型 M0M_0M1M_1

    • 分别学习 M0(X)=E(YT=0,X)M_0(X) = E(Y|T=0,X)M1(x)=E(YT=1,X)M_1(x) = E(Y|T=1,X)

  • X-Learner 第二阶段#card

    • 基于 和 M0M1M_0和M_1 分别交叉(X 的由来)预测干预组和控制组样本的反事实结果,与事实结果的差值就是样本的因果效应,此时就可以用控制组和干预组的样本分别训练 CATE 预估模型 Mτ0(X)M_{\tau0}(X)Mτ1(X)M_{\tau1}(X)

    • 最终的 CATE 估计是两者的融合 τ^(x)i=Mτ0(x)g(x)+Mτ1(x)(1g(x))\hat{\tau}(x)_i = M_{\tau0}(x)g(x) + M_{\tau1}(x)(1-g(x) ) ,对于权重函数 g(x)g(x) 一种选择是[[倾向性评分]]函数 e(x)e(x) ,当干预组样本量远大于控制组时也可以取 1 或 0。

    • 通过与实际结果差分计算增量

      • 用有干预模型预测无干预群体的有干预结果,无干预组近似增量 D0=μ^1(X0)Y0D_0=\hat{\mu}_1\left(X_0\right)-Y_0

      • 用无干预模型预测有干预群体的无干预结果,有干预组近似增量 D1=Y1μ^0(X1)D_1=Y_1-\hat{\mu}_0\left(X_1\right)

    • 根据增量建立两个模型,对增量建模可以引入相关先验知识提升模型精度

      • τ^0=f(X0,D0)\hat{\tau}_0=f\left(X_0, D_0\right)

      • τ^1=f(X1,D1)\hat{\tau}_1=f\left(X_1, D_1\right)

    • 引入 [[倾向性评分匹配]]PSM 加权得到最后提升评估结果

      • e(x)=P(W=1X=x)τ^(x)=e(x)τ^0(x)+(1e(x))τ^1(x)\begin{aligned} & e(x)=P(W=1 \mid X=x) \\ & \hat{\tau}(x)=e(x) \hat{\tau}_0(x)+(1-e(x)) \hat{\tau}_1(x)\end{aligned}
  • 优点#card

    • 适合实验组和对照组样本数量差别较大场景

    • 增量的先验知识可以参与建模,引入权重系数,减少误差

  • 缺点#card

    • 多模型造成误差累加

Word Embedding

两种方法

  • Count-based

    • word frequency and co-occurrence matrix
  • Context-based

词向量常用方法

[[One-hot Encoding]] 维度灾难,样本稀疏

统计语言模型:通过统计词频计算一个句子在文本中出现的概率,以此确定哪个词序列的可能行更大。

  • [[Markov]]假设 n-gram 模型

  • 泛化能力差、模型计算复杂度高、没有解决文本本身的表征问题

[[NNLM]] 利用神经网络求解出每个词语的 Word Embedding

[[Word2Vec]] 考虑文本的上下文环境

[[GloVe]] svd 矩阵分解和 [[Word2Vec]] 上下文思想

Conxtextualized Word Embedding 每一个 word token 都给一个 embedding

[[ELMo]]

[[GPT]] 单向语言模型,生成式任务

[[BERT]]

常见 emebdding 方法对比


Word2Vec/Negative Sampling

NEG:负向样本太多,选取部分负样本来更新。可以作为 HS 的一种替代。

  • 词在集合中的频率,带权采样

    • 权重计算 :-> len(w)=count(w)uvocabcount(u)\operatorname{len}(w)=\frac{\operatorname{count}(w)}{\sum_{u \in \operatorname{vocab}} \operatorname{count}(u)}
    • 权重计算经验值 :-> len(w)=count(w)3/4uvocabcount(u)3/4\operatorname{len}(w)=\frac{\operatorname{count}(w)^{3 / 4}}{\sum_{u \in \text {vocab}} \operatorname{count}(u)^{3 / 4}}
  • 具体采样实现 #card

    • 负采样概率*1亿=单词在表中出现的次数。

    • 生成 0-1亿范围内的一个随机数,然后上面对应的序号

负采样的目标函数是一个经验公式。

E=logσ(wwOh)wjWneglogσ(wwjh)E=-\log \sigma\left(\overrightarrow{\mathbf{w}}^{\prime}_{w_{O}} \cdot \overrightarrow{\mathbf{h}}\right)-\sum_{w_{j} \in \mathcal{W}_{n e g}} \log \sigma\left(-\overrightarrow{\mathbf{w}}^{\prime}_{w_{j}} \cdot \overrightarrow{\mathbf{h}}\right)

wwO\overrightarrow{\mathbf{w}}^{\prime}_{w_{O}}:为真实的输出单词对应的输出向量

wwj\overrightarrow{\mathbf{w}}^{\prime}_{w_{j}}`:为负采样的单词对应的输出向量

作用:

    1. 加快模型计算
    1. 保证了模型训练的效果,其一模型每次只需要更新采样的词的权重,不用更新所有的权重,那样会很慢,其二中心词其实只跟它周围的词有关系,位置离着很远的词没有关系,也没必要同时训练更新。

Wide&Deep

记忆能力:模型直接学习并利用历史数据中物品或特征的“共现频率”的能力。

  • 高频、常见的特征

泛化能力:模型传递特征的相关性,以及发掘稀疏甚至从未出现过的稀有特征与最终标签相关性的能力。

不应该进 DNN,进入 DNN 之后没有记忆性。

Wide 侧

  • 人工特征工程

    • 只输入已安装应用以及曝光应用

TODO #card 为什么现在搜索排序或者推荐不常用这种架构?
+

[[Code]]

  • tf.estimator.DNNLinearCombinedClassifier

  • 稀疏特征向量如何乘以一个稠密的权重矩阵

    • One-Hot-Encoding

    • Multi-Hot-Encoding

    • tf.sparse.SparseTensor(indices, values, dense_shape) dense_shape 需要指定原始 tensor 的尺寸

    • [[Tensorflow]]

      • tf.sparse_tensor_dense_matmul(sp_a, b, ……)

        • 特征权重默认为 1
      • tf.nn.embedding_lookup_sparse(params, sp_ids, sp_weights)

        • tf.nn.embedding_lookup_sparse - 知乎

        • 相同 id 取出权重后可以指定聚合方法

        • 一个 feature 有多个 <tag, value>

        • 实际使用 safe_embedding_lookup_sparse

        • embedding_lookup 区别

          • 处理离散特征只有一个取值的情况。无法处理多个 tag。
  • 如何实现两部分使用不同的优化器 group

  • 特征

    • _CategoricalColumn

    • _WeightedCategoricalColumn

    • _DenseColumn

    • _EmbeddingColumn

[[Ref]]


XGBoost

效率优化

  • 并行

    • boosting 算法的弱学习器无法并行迭代,弱学习器迭代过程中最耗时的部分是决策树的分裂过程。

    • 在不同线程中并行选择特征最大增益的特征划分点

  • 内存优化

    • 对训练的每个特征排序并且以块的结构存储在内存中
  • 存储+IO

    • 合理设置块的大小,充分利用 CPU 缓存进行读取加速

    • 分块压缩并且存储到硬盘上,将分块分区到多个硬盘上实现更大的 io

效果优化

  • 缺失值处理

    • 首先忽略带缺失值的数据,像正常情况下一样将前两种数据分别计算并导流到左子树和右子树。
    • 然后计算带缺失值的数据导流向左右子树,计算两种方案下的Objective 情况,取得分最小的作为在这个节点的默认情况。
  • 树模型的正则项控制模型复杂度

    • 叶子节点个数 + 叶子节点权重的 L2 正则化

    • 采用预剪枝策略,只有分裂后增益大于 0 才会进行分裂

寻找最佳分裂点以及如何加速

  • 贪心算法 :-> 对特征值先排序,然后遍历所有可能分裂点计算分裂增益,取分裂增益最大的点,作为最优分裂点。
  • 近似算法 :-> 使用特征值的分位数作为候选分裂点,三分位数
    稀疏感知算法

[[XGBoost/Loss]]

[[XGBoost/booster]]

[[XGBoost/特征重要性]]

[[XGBoost/code]]

[[XGBoost/Question]]

k分类实现

  • 每一轮训练k棵树。

  • 第一轮用 (x,0), (x,1) 去训练树,x 在每一棵树上的预测结果求 softmax 得出分类概率,然后计算残差。

  • 第二轮用 (x,0-fi(x)), (x,1-fi(x)) 去训练树,和上面相同。

  • 利用最后一轮的结果的 softmax 结果。


XGBoost/Question

如何理解 XGB 的延展性?

  • 基分类器 :-> CART决策树、LR 和 Linear

  • 目标函数 :-> 自定义 loss function,需要二阶可导

  • 学习方法 :-> block 结构支持并行化,支持 out-of-core 计算
    GBDT 和 XGboost 的区别

  • 算法本身优化

    • 学习器 :-> 支持更多弱学习器
    • 模型复杂度控制 :-> 损失函数加入正则化控制模型复杂度,代替原来的剪枝方法
    • 损失函数优化 :-> 对误差部分做二阶泰勒展开,更加准确
  • 运行效率优化

    • 特征预处理 :-> 对所有特征值进行排序分组
    • 对于分组特征 :-> 选择合适的分组大小,使用 CPU 缓存进行读取加速将各个分组保存到多个硬盘提高 IO 速度
    • 决策树建立过程 :-> 并行选择,找到合适的子树分裂特征和特征值
  • 算法鲁棒性

    • 缺失值处理 :-> 枚举所有缺失值在当前节点进入哪棵子树
    • 正则 :-> L1 和 L2 正则
      XGB 为什么要使用二阶导数?
  • 求解器 :-> 减少求解器的设计,其他损失函数泰勒展开之后最终的形式和 mse 不泰勒展开的形式是完全一致的。

  • 通用性 :-> 统一损失函数求导形式,可以自定义损失函数

  • 收敛 :-> 二阶导数能让梯度更快收敛

  • 计算量 :-> 可以使用打分函数,减少分裂子叶时的计算量
    如何选择用一种模型来替代 xgboost 模型,你会用什么?

[[机器学习知识体系汇总]] Xgboost

  • 你选择使用xgboost的原因是什么?#card

  • Xgboost和GBDT有什么异同?#card

  • 为什么xgboost训练会那么快,主要优化点事什么?#card

  • Xgboost是如何处理缺失值的?#card

    • 首先忽略带缺失值的数据,像正常情况下一样将前两种数据分别计算并导流到左子树和右子树。

    • 然后计算带缺失值的数据导流向左右子树,计算两种方案下的Objective 情况,取得分最小的作为在这个节点的默认情况。

  • Xgboost和lightGBM有哪些异同?#card

    • 算法本身

    • 运行效率

    • 鲁棒性

  • Xgboost为什么要使用泰勒展开式,解决什么问题?#card

  • Xgboost是如何寻找最优特征的?#card


XGBoost/Loss

训练损失

正则化损失包括 #card

  • 叶子节点个数 + 叶子节点权重的 L2 正则化
    为什么不用更高阶的正则约束 #card
    card-last-score:: 5
    card-repeats:: 1
    card-next-schedule:: 2023-08-26T01:53:50.014Z
    card-last-interval:: 4

  • 计算复杂度增加

  • 欠拟合

目标函数分裂推导

  • 优化目标、损失函数 :-> Obj=L=i=1nl(yi,y^i){Obj = L = \sum^{n}_{i=1}l(y_i,\hat y_i) }

    • 第 t 轮迭代目标 :-> Obj(t)=i=1nl(yi,y^it1+ft(xi)){Obj^{(t)} = \sum^{n}_{i=1}l(y_i,\hat y_i^{t-1} + f_t(x_i))}
  • 二阶泰勒展开公式 :-> f(x+Δx)f(x)+f(x)Δx+12f(x)Δx2{f(x+\Delta x) \approx f(x)+f'(x)\Delta x + \frac{1}{2}f''(x)\Delta x^2}

  • 带入化解:Obj(t)=i=1n[l(yi,y^it1)+gift(xi)+12hift(xi)2]{Obj^{(t)}=\sum^n_{i=1}[l(y_i,\hat y_i^{t-1})+ g_if_t(x_i) + \frac{1}{2} h_i f_t(x_i)^2]}

    • 树的维度,带入 ft(xi)=wj{f_t(x_i)=w_j}Obj(t)=j=1T[(iIjgi)wj+12(iIjhi)wi2]{Obj^{(t)} = \sum^T_{j=1}[ (\sum_{i \in I_j} g_i)w_j + \frac{1}{2} (\sum_{i \in I_j}h_i) w_i^2]}

    • Gj=iIjgi,Hj=iIjhi{G_j = \sum_{i \in I_j} g_i, H_j = \sum_{i \in I_j}h_i},可以得到 wj=GjHj{w_j = -\frac{G_j}{H_j}}

    • 目标函数化简为 Obj(t)=12j=1TGj2Hj{Obj^{(t)} = - \frac{1}{2} \sum^T_{j=1} \frac{G_j^2}{H_j}}

    • 树分裂 Gain=12[GL2HL+GR2HR(GL+GR)2HL+HR]{Gain = \frac{1}{2} [\frac{G_L^2}{H_L} + \frac{G_R^2}{H_R} - \frac{(G_L+G_R)^2}{H_L+H_R}]}

image.png
occlusion:: eyIuLi9hc3NldHMvaW1hZ2VfMTc0MjM5MDAwNDU1Nl8wLnBuZyI6eyJjb25maWciOnsiaGlkZUFsbFRlc3RPbmUiOnRydWV9LCJlbGVtZW50cyI6W3sibGVmdCI6NTIwLjA5OTAxMDQyMTM3MDQsInRvcCI6NTI4LjgwOTM4MTM3NTUxMSwid2lkdGgiOjc4NC4yMDM5MTU5NzM5MjIyLCJoZWlnaHQiOjc3LjYxODczOTYzNzExNDIzLCJhbmdsZSI6MCwiY0lkIjoxfSx7ImxlZnQiOjUwMy42MDA0ODQyMDQxNjU4NywidG9wIjo2NDMuMzA5Mzk4MTA5MDE3NSwid2lkdGgiOjY1My4xOTk4NzQ3NDE0NjA1LCJoZWlnaHQiOjg0LjYxODczNDU4MDk0NjQ3LCJhbmdsZSI6MCwiY0lkIjoyfSx7ImxlZnQiOjUwNS41OTkyNjM4MzE5ODY4LCJ0b3AiOjc3Ni4zMDkzOTM3NzUxNTk3LCJ3aWR0aCI6NjkzLjIwMjYwODkwODYzNzgsImhlaWdodCI6ODYuNjE4Nzc1NTExODI1NTYsImFuZ2xlIjowLCJjSWQiOjN9LHsibGVmdCI6NTA2LjE5ODI2MDkxNTk1NjE1LCJ0b3AiOjg5OC42MTg3OTEwNDE0ODI2LCJ3aWR0aCI6NjMyLjAwNDIxNDYxODY3MywiaGVpZ2h0Ijo3NC4wMDAwMDg5MDg0ODU0OCwiYW5nbGUiOjAsImNJZCI6NH0seyJsZWZ0Ijo2MTYuNjAwNDMwODU0NTYyMSwidG9wIjoyMTQuODA5MzYwNjY5MzAxNzgsIndpZHRoIjo0MTUuMTk5OTAxNDE2MjYyNywiaGVpZ2h0Ijo4NS42MTg3MDY0MTA4NzEwMywiYW5nbGUiOjAsImNJZCI6NX1dfX0=
xgboost如何使用MAE或MAPE作为目标函数? - 知乎

  • 利用可导函数逼近 #card
    • mse 在初始误差比较大时,loss 是平方会偏离目标

    • ln(cosh(x))以及 log(exp(-x) + exp(x))进行逼近

    • 利用 huber loss 逼近 mae

      • 使用可导逼近形式 Pseudo-Huber loss function 做为目标函数

        • Lδ(yi,y~i)=δ2(1+(y~iyiδ)21)L_{\delta}\left(y_{i}, \tilde{y}_{i}\right)=\delta^{2}\left(\sqrt{1+\left(\frac{\tilde{y}_{i}-y_{i}}{\delta}\right)^{2}}-1\right)

1
2
3
4
5
6
7
8
def huber_approx_obj(dtrain, preds):
d = preds -dtrain
h = 1 #h is delta in the formula
scale = 1 + (d / h) ** 2
scale_sqrt = np.sqrt(scale)
grad = d / scale_sqrt
hess = 1 / scale / scale_sqrt
return grad, hess

  • 自定义一个二阶导数值

XGBoost/booster

[[DART]]

  • 带 dropout 的树学习器

gblinear

  • 线性模型,迭代器增加再多对模型的收敛能力提升也不大

  • 数据高维稀疏的场景可以尝试使用

  • 利用 gbm 框架求解 linear,利用梯度提升方法代替梯度下降方法


Word2Vec

Word2Vec 是 NLP 中一种通过语料库预训练[[Word Embedding]] 的方法。常见实现形式:

  • [[CBOW]] :<-> 根据上下文来预测下一个单词。

  • [[Skip-Gram]] :<-> 根据一个单词来预测上下文。
    CBoW 和 skip 对比

  • 训练速度 :-> Cbow 训练速度快

  • 训练效果(准确率):-> skip 准确率和生僻字预测效果好,每一词会经过 C 次调整,模型的训练机制会对向量的预测能力要求更高(1 predict n)
    参数更新

  • tjc=I(jc=jc)t_{j}^{c}=\mathbb{I}\left(j_{c}=j_{c}^{*}\right),即网络第 c 个输出的第 j 个分量对应于第 c 个真实的输出单词 $${word_{j^*_c}}$$时,它为 1;否则为0。定义:

  • ejc=Eujc=yjctjce_{j}^{c}=\frac{\partial E}{\partial u_{j}^{c}}=y_{j}^{c}-t_{j}^{c}

  • Ewj=c=1CEujc×ujcwj=c=1Cejch\frac{\partial E}{\partial \overrightarrow{\mathbf{w}}_{j}^{\prime}}=\sum_{c=1}^{C} \frac{\partial E}{\partial u_{j}^{c}} \times \frac{\partial u_{j}^{c}}{\partial \overrightarrow{\mathbf{w}}_{j}^{\prime}}=\sum_{c=1}^{C} e_{j}^{c} \overrightarrow{\mathbf{h}}

  • EH=Eh=c=1C(uch)TEuc\overrightarrow{\mathbf{E H}}=\frac{\partial E}{\partial \overrightarrow{\mathbf{h}}}=\sum_{c=1}^{C}\left(\frac{\partial \overrightarrow{\mathbf{u}}^{c}}{\partial \overrightarrow{\mathbf{h}}}\right)^{T} \frac{\partial E}{\partial \overrightarrow{\mathbf{u}}^{c}}

  • EH=c=1CWec=j=1VEIjwj\overrightarrow{\mathbf{E H}}=\sum_{c=1}^{C} \mathbf{W}^{\prime} \overrightarrow{\mathbf{e}}^{c}=\sum_{j=1}^{V} E I_{j} \overrightarrow{\mathbf{w}}_{j}^{\prime}

  • Ewk,i=Ehi×hiwk,i=EHi×xk\frac{\partial E}{\partial w_{k, i}}=\frac{\partial E}{\partial h_{i}} \times \frac{\partial h_{i}}{\partial w_{k, i}}=E H_{i} \times x_{k}

优化

  • [[Hierarchical Softmax]]本质是把 N 分类问题变成 log(N)次二分类

  • 从 Word2Vec 中可以看到,更新一个样本时需要计算词表每个单词的概率。计算量大。

  • HS 使用树结构能在 $${\log(V)}$$ 的时间内计算出给定单词的概率。

  • 二叉树的每条边代表分裂:

    • 向左的边:表示选择左子节点,边的权重为选择左子节点的概率

    • 向右的边:表示选择右子节点,边的权重为选择右子节点的概率

  • 对于任意一个中间节点 t,有一个向量 $$\overrightarrow{\mathbf{v}_t}^{\prime}$$。从求解 $$\overrightarrow{\mathbf{w}}^{\prime}$$ 问题转化到 V-1 个二叉树的中间节点向量表达(下图灰色的节点)。

  • 左子节点的概率:$$p(t, l e f t)=\sigma\left(\overrightarrow{\mathbf{v}}_{t}^{\prime} \cdot \overrightarrow{\mathbf{h}}\right)$$

  • 右子节点的概率:$$p(t, right)=1 - \sigma\left(\overrightarrow{\mathbf{v}}_{t}^{\prime} \cdot \overrightarrow{\mathbf{h}}\right)$$

  • 左右节点的概率和为 1

  • 当需要计算某个单词的概率时,找到从根到这个单词所在叶节点的路径。然后按上面的方法计算概率,一直将概率相乘,得到这个单词的概率。

  • p(w)=j=1L(w)1σ(g(n(w,j+1)=ch(n(w,j)))×vn(w,j)h)p(w)=\prod_{j=1}^{L(w)-1} \sigma\left(g(n(w, j+1)=c h(n(w, j))) \times \overrightarrow{\mathbf{v}}_{n(w, j)}^{\prime} \cdot \overrightarrow{\mathbf{h}}\right)

  • g(...)g(...) 表示如果这个单词属于当前节点的左子树,为 1,反之为 -1。和上面的节点概率有关。

  • 词频高的节点离根节点较远,距离远参数数量就多,在训练过程中,低频词的路径上的参数能够得到更多的训练。

问题

  • 为什么在计算word similarity的时候,我们要用cosine distance,我们能够用其他距离吗?

    • 欧拉距离也可以,cos 自带归一化。
  • 在word2vec的目标函数中,两个词 $${w_i,w_j}$$ 的词向量 $${v_i,v_j}$$ 其实分别来自输入权重矩阵和输出权重矩阵,那么在实际使用时,我们需要分别存储输入矩阵和输出矩阵吗?还是直接用输入矩阵当作word2vec计算similarity就好了?

    • 两个向量来自不同的空间

    • 输出权重矩阵 encodes the meanings of words as context

    • ^需要选择那个矩阵?^

  • 隐层的激活函数是什么?是sigmoid吗?

推荐系统中使用 embedding 的方法

  • 有监督学习 wide&deep 之类,embedding 作为优化变量,随机初始化,在优化最终的 logloss 的过程中, embedding 是模型副产品。

  • 无监督学习

    • 套用 word2vec 的方法,预训练 embedding

    • 上面学习得到的 emb 可以用来做召回,或者放到其他模型中作为参数输入。

  • embedding 使特征向量化,从而实现计算相似度

[[Ref]]

  • [[Word2Vec tf 实现]]

  • word_representation

  • nce-loss函数与Word2Vec实现 - 知乎

  • 稀疏词向量,用skip-gram还是cbow训练好? - 知乎

    • 使用 Skip-gram :一句话可能产生多个训练样本,对罕见词和罕见搭配更加友好

    • cbow 避免训练集膨胀,训练结果偏向常用词

  • [NLP] 秒懂词向量Word2vec的本质

    • Distributed Representations of Sentences and Documents

      • 贡献:在前人基础上提出更精简的语言模型(language model)框架并用于生成词向量,这个框架就是 Word2vec
    • Efficient estimation of word representations in vector space

      • 贡献:专门讲训练 Word2vec 中的两个trick:hierarchical softmax 和 negative sampling

      • 优点:Word2vec 开山之作,两篇论文均值得一读

      • 缺点:只见树木,不见森林和树叶,读完不得要义。

        • 这里『森林』指 word2vec 模型的理论基础——即 以神经网络形式表示的语言模型,『树叶』指具体的神经网络形式、理论推导、hierarchical softmax 的实现细节等等
    • Xin Rong word2vec Parameter Learning Explained


Xavier Initialization

Glorot 条件 :-> 好的初始化应该使得各层的激活值和梯度的方差在传播过程中保持一致。

  • mean=0.0, std_dev=(2.0 / (input_dim + output_dim)) ** 0.5

  • tf.contrib.layers.xavier_initializer

  • W = tf.Variable(np.random.randn(node_in, node_out)) / np.sqrt(node_in)

保持输入与输出的方差一致。在线性函数上推导出来,部分非线性函数比如(tanh)也可以使用。ReLU 需要使用 [[He Initialization]] 解决

Ref


XGBoost/特征重要性

XGBoost 中有什么方法可以评估特征重要性? #card

  • 通过整体分布产生随机特征,通过随机特征在特征重要性中的位置,筛除重要性不是非常明显的特征。

  • [[SHAP]]

特征重要性指标 get_score 方法

  • weight :-> 特征在树中作为划分属性的次数
  • gain :-> 特征作为划分属性时, loss 平均的降低量
  • cover :-> 特征作为划分属性时,对样本的覆盖度
    • 覆盖度指特征用作分割点后影响的 :-> 样本数量,即多少样本经过特征分割到两个子节点

ZSA Keyboard Lighting

第一部分

  • Animation speed 调整灯光动画的速度

  • Brightness 调整灯光

image.png

第二部分

  • Hue 调整不同颜色

  • Saturation

  • Set color 设置成指定颜色

  • Switch animation 切换不同的灯光动画

  • Toggle layer colors 打开或关闭 layer 的灯光,关闭之后如果有灯光动画,就走灯光动画。

  • Toggle lighting 打开或关闭灯光,关闭后,layer 灯光不受影响。

image.png

Ref


bidding

为什么需要有出价 #card

  • 因为在广告场景中引入了广告主 (advertiser) 这一角色, 出价则是提供了一种方式供广告主表达其对付费诉求,即对一次曝光 / 点击 / 转化愿意付多少钱。

  • 其次,广告平台往往需要提供多种产品形态来满足广告主的各种需求,如最常见的是保成本类产品、还有一些更追求跑量、品牌广告则是对保量有严格的要求;针对这些不同的产品形态,基本上最终的策略都落在了出价上。因为在基于 ecpm 排序的广告系统中,基本上能比较灵活地改动的就是 bid 这个因素了

而针对上面各种产品需求,其实都是可以通过相同的最优化建模的方式来解决的,阿里之前发表过一篇 paper 来描述这个问题,对于出价公式的推导和控制器的构建都有较好的指导意义;#card

  • [[@Bid Optimization by Multivariable Control in Display Advertising]]

先看 bid,直观上看就是竞价流量的 bid 平均水位,对于大部分的 oCPX 广告,这里的 bid 也往往是广告主的平均出价水位(nobid 类产品没有广告主出价,但是 bid 也能一定程度上反映广告主的预算),系统不能在广告主的 bid 基础上无约束地提,因为广告主的出价表达了其对转化成本的预期,如果一个劲儿地提 bid,成本是没法很好地保证的,所以这里的 bid 基本上能理解为 “广告主在某个媒体平台上愿意为一个转化出的价格”,而影响广告主出的 bid 高低有很多,这里重点讲以下 2 个因素:

  • (1)广告主的生意模式:一个比较关键的因素是转化对于广告主而言有没有除了这个转化以外的价值#card

    • 一般的白牌商家的预算都属于纯效果预算,都是有比较严格的 roi 的考核的,这种情况下广告主愿意出的价格在各个媒体上也是比较固定的,与之相反的是纯品牌预算,即对转化基本没有太多考核,像 gd 很多时候就是在溢价买流量,这个时候广告主会根据平台的影响力,或者说流量价值来出价;

    • 而实际中,很多预算其实是介于纯效果预算和纯品牌预算之间的,所以广告主的出价的时候也会根据平台的转化是否能带来外溢价值,来对出价做相应的调整; 如广告主在小红书等种草平台是能接受赞藏、加粉等成本,比抖音、快手等竞品要更高,因为在广告主心里会认为这些种草平台的一个转化能够带来更多外溢价值

  • (2)平台的竞争激烈程度:即广告主能否在平台上卷起来#card

    • 在一个媒体平台上,如果竞争不够激烈,如最极端情况下只有一个广告主,那转化的定价权基本上就掌握在广告主的手里(而这也是广告主生态需要解决的问题之一);当广告主数量变多后,蓝海变成红海,广告主在总体 roi 还是为正的前提下,还是有动力降低自己的利润、在平台提升转化出价的成本来做营销的

    • 所以,假设广告主出价是理性的,那要提高公式里的 bid,平台长期要做的就是提升其流量价值(比较虚的概念,与市场认可度与声量相关),满足更多广告主的营销诉求,引入更多的广告主进入平台,营造一个良性的竞争环境,这部分主要上面提到的第 3 部分即客户产品来承当,当然也会涉及到第 1 部分(如 ctr、cvr 预估准确性)第 2 部分(如流量策略影响广告主生态)


YJango@万字科普ChatGPT-4为什么会颠覆人类社会

记忆和泛化

[[In-Context Learning]] 语境内学习

  • 理解指令

  • 理解例子

思维链

  • 代码训练

  • 拆分问题,分布思考

[[Reinforcement Learning from Human Feedback]]

  • 根据人类对它生成答案的好坏评分来调节模型,引导它生成人类认可的创意回答。

人类群体通过语言处理来实现「知识的创造、继承和应用」

教育模式影响

  • 大语言模型创新和更高层次创新

培养终生学习能力


bingo hong@时间序列预测方法总结

时间序列问题难点

  • 理解时间序列预测问题是要用历史数据预测未来数据

  • 时间序列问题的训练集、测试集划分

  • 特征工程方法及过程(方法2的过程很有趣)

  • 如何转化为监督学习数据集

  • LSTM计算过程理解,包括输入输出维度、参数数量等

  • seq2seq过程的理解,decoder实现

  • attention注意力机制的原理及实现,包括encoder-decoder attention, self attention, multi-head attention等

  • 时间卷积网络的含义,顾名思义就是将CNN方法用于时间序列中,主要是dilated-convolution and causal-convolution

  • prophet预测原理,各参数对模型拟合效果、泛化效果的影响

  • TPA侧重选择关键变量

  • 时间序列基本规则法中周期因子得计算过程

  • 传统方法如周期因子、线性回归、ARMA等的预测结果表现为,预测趋势大致正确,但对波动预测不理想,体现在波动的幅度差异、相位偏移。

  • 时间序列分解方法。理解加法模型和乘法模型,判断分解模型的选取及分解技巧


Z-Note

A Z-Note is a Synthesis Note.

  • A [[Z-Note]] is used within your academic writing as a representation of a resolved and converted #[[Q-Note]] :-> 对应一个已解决或转化的 Q-Note

  • A Z-Note is always at the Page level and has a single declarative title (claim, theory, argument, problem) as a page title (prefaced by an Z) :-> 以 Z - 声明性标题(主张、理论、论点、问题) 为标题的 Page

  • A Z-Note is densely linked with #[[R-Note]], possibly other #[[Z-Note]] and #[[Q-Note]]. :-> Z-Note 和其他类型的笔记都息息相关。

  • A Z-Note may be produced as the result of a #[[Q-Note]]. :-> Z-Note 可能是对一个 Q-Note 研究的成果。

  • The content of a Z-Note can be used in multiple contexts and for multiple projects. :-> 可以在多个上下文和项目中使用

  • A collection of Z-Note are a representation of your personal synthesized knowledge. Also know as #[[Zettelkasten]], [[Evergreen Notes]] or [[Permanent Notes]]. :-> 多少 Z-Note 就代表你有多少综合的知识。


chyixian

日本留学文科博士

[[@文科博士是怎样读书的]]

[[@如何保持创造力?–「观心笔记」]]

[[My workflow- 一个文科博士生的资料管理、阅读和笔记系统-基于 DEVONthink 3,Obsidian/]]

微信读书笔记导出后,做详细笔记


competitive programming

Competitive Programming(CP) 指竞赛性编程。与面向工程的程序设计不同,CP追求的是在一定的时间内,实现一定的算法和数据结构,以解决某一特定的、可能并不具有现实意义的问题。
定义来源于 CP Wiki

基础

  • [[二分搜索]]

    • 它的基本思想是,对于一个在某种意义上有序的数组,这个数组的前半部分满足某一条件,而后半部分不满足这一条件,我们不断选择区间中点,判断其是否满足条件,从而将区间不断折半,最后就可以找到数组中的转折点,也即满足这一条件的最后一个点,或不满足这个条件的第一个点。
  • [[三分搜索]]

    • 三分查找则是针对数组或范围满足单峰或单谷的特性,即可能是先递增后递减,或先递减后递增。

数学

  • [[Number Theory]]

    • [[欧几里得算法]]

    • [[费马小定理]]

    • [[乘法逆元]]

  • [[组合数学]]

字符串

[[Dynamic Programming]]

[[Graph Theory]]

[[Data structure]]

See Also

Ref


dataloader

torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=None, sampler=None, batch_sampler=None, num_workers=0, collate_fn=None, pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None, multiprocessing_context=None, generator=None, *, prefetch_factor=None, persistent_workers=False, pin_memory_device='')

  • collate_fn 如何处理每一行数据

Ref


exposure bias

问题背景 #card

  • 针对的问题是只有被曝光的样本才能进入训练集,导致 training 阶段能获取到的样本只是 serving 时很小的一部分

解决方法

  • Augmentation、IPS 和 Domain Adaption

在召回上被简化成[[负样本]]选择问题 [[双塔模型样本选择]] [[SENET]]

  • 曝光未点击数据 #card

    • 这就是上面说的导致 Sample Selection Bias 问题的原因。我们的经验是,这个数据还是需要的,只是要和其它类型的负例选择方法,按照一定比例进行混合,来缓解 Sample Selection Bias 问题。当然,有些结论貌似是不用这个数据,所以用还是不用,可能跟应用场景有关。
  • 全局随机选择负样本#card

    • 就是说在原始的全局物料库里,随机抽取做为召回或者粗排的负例。这也是一种做法,Youtube DNN 双塔模型就是这么做的。从道理上讲,这个肯定是完全符合输入数据的分布一致性的,但是,一般这么选择的负例,因为和正例差异太大,导致模型太好区分正例和负例,所以模型能学到多少知识是成问题的。
  • Batch 内随机选择负样本 #card

    • 就是说只包含正例,训练的时候,在 Batch 内,选择除了正例之外的其它 Item,做为负例。这个本质上是:给定用户,在所有其它用户的正例里进行随机选择,构造负例。它在一定程度上,也可以解决 Sample Selection Bias 问题。比如 Google 的双塔召回模型,就是用的这种负例方法。
  • 选择 4: 曝光数据随机选择负例 #card

    • 就是说,在给所有用户曝光的数据里,随机选择做为负例。这个我们测试过,在某些场景下是有效的。
  • 选择 5: 基于 Popularity 随机选择负例 #card

    • 这种方法的做法是:全局随机选择,但是越是流行的 Item,越大概率会被选择作为负例。目前不少研究证明了,负例采取 Popularity-based 方法,对于效果有明显的正面影响。它隐含的假设是:如果一个例子越流行,那么它没有被用户点过看过,说明更大概率,对当前的用户来说,它是一个真实的负例。同时,这种方法还会打压流行 Item,增加模型个性化程度。
  • 选择 6: 基于 Hard 选择负例#card

    • 它是选择那些比较难的例子,做为负例。因为难区分的例子,很明显给模型带来的 loss 和信息含量比价多,所以从道理上讲是很合理的。但是怎样算是难的例子,可能有不同的做法,有些还跟应用有关。比如 Airbnb,还有不少工作,都是在想办法筛选 Hard 负例上。

#card 我们在模型召回阶段的经验是:比如在 19 年年中左右,我们尝试过选择 1 + 选择 3 的混合方法,就是一定比例的 “曝光未点击” 和一定比例的类似 Batch 内随机的方法构造负例,当时在 FM 召回取得了明显的效果提升。但是在后面做双塔模型的时候,貌似这种方法又未能做出明显效果。

  • 全局随机,则无论是 FM 召回还是后来的双塔,都没做出效果,有时甚至负向明显。但是你又能看到一些报道采用的是全局随机做为负例。所以,我目前的感觉,负例这块是个宝藏,值得深入探索下,包括不同方法的混合,但是到底哪种方法是有效的,貌似很难有统一的定论,带有一定艺术性。

hls__A Consumer Compensation System in Ride-hailing Service_2023_Yu

a transfer learning enhanced uplift modeling is designed to measure the elasticity
ls-type:: annotation
hl-page:: 1
hl-color:: yellow
a model predictive control based optimization is formulated to control the budget accurately
ls-type:: annotation
hl-page:: 1
hl-color:: yellow
Given a total compensation budget or an average compensation rate, find an optimal policy to subsidize queries so that the overall revenue is maximized.
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
Consumer elasticity
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
Consumer fairness
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
Randomness in queries:
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
Transfer Learning Enhanced Uplift Modeling
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
abundant biased observational data and limited randomized data
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
[:span]
ls-type:: annotation
hl-page:: 3
hl-color:: yellow
tabular input space and transfer learning
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
Massive observational data is first fed into both inputs to pre-train the model
ls-type:: annotation
hl-page:: 3
hl-color:: red
RCT data is used to fine-tune using a different output layer
ls-type:: annotation
hl-page:: 3
hl-color:: red
Optimization Formulation
ls-type:: annotation
hl-page:: 3
hl-color:: yellow
use the mean of the historical query-wise elasticity to forecast the class-wise elasticity
ls-type:: annotation
hl-page:: 3
hl-color:: yellow
model predictive control (MPC) technology
ls-type:: annotation
hl-page:: 3
hl-color:: yellow
[:span]
ls-type:: annotation
hl-page:: 3
hl-color:: yellow
The features include query information (e.g., the origin, destination, time, weekday, and distance), spatial features (e.g., point of interest information, and order statistics in the same cells), subsidy information, and trading features (e.g., historical order placement rate). I
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
The size of the common inner layers and output layer is set to 128, 64, and 32
ls-type:: annotation
hl-page:: 4
hl-color:: green
[:span]
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
No Cluster Oracle
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
Compared with the baseline, our system obtains a lower subsidy rate and higher revenue, for its accurate compensation, to achieve a higher ROI.
ls-type:: annotation
hl-page:: 4
hl-color:: yellow


hls__DeeprETA_2022_Hu

routing engine

Routing engines divide up the road network into small road segments represented by weighted edges in a graph.
ls-type:: annotation
hl-page:: 1
hl-color:: yellow
graph-based models used by routing engines can be incomplete with respect to realworld planning scenarios typically encountered in ride-hailing and delivery
ls-type:: annotation
hl-page:: 1
hl-color:: yellow

  • 路线不确定

  • 人为失误:开错路

  • 分布偏移:不同任务到达时间分布不同

    • Empirical arrival time distributions differ markedly across different tasks
      ls-type:: annotation
      hl-page:: 1
      hl-color:: yellow
  • 预估形式不确定:不同业务对 ETA 诉求不同,比如预估价需要平均 ETA,用户可能需要 ETA 分布或者期望

    • Uncertainty estimation. Different ETA use cases call for distinct point estimates of the predictive distribution.
      ls-type:: annotation
      hl-page:: 1
      hl-color:: yellow
      We take a hybrid approach, termed ETA post-processing, that treats the routing engine ETA as a noisy estimate of the true arrival time. We use a deep residual ETA network, referred to as DeeprETANet, to predict the difference between the routing engine ETA and the observed arrival time.
      ls-type:: annotation
      hl-page:: 1
      hl-color:: yellow
  • routing engine ETA

  • DeeprETANet 预估 routing engine ETA 和 the observed arrival time 的残差

本文创新点

  • ETA Post-processing
    ls-type:: annotation
    hl-page:: 1
    hl-color:: yellow

  • DeeprETANet Architecture
    ls-type:: annotation
    hl-page:: 2
    hl-color:: yellow

  • Multi-resolution Geospatial Embeddings
    ls-type:: annotation
    hl-page:: 2
    hl-color:: yellow

    • geo 相关信息如何 embedding
      相关工作
  • geo 相关信息如何 embedding

    • Past works have encoded these locations with multi-scale sinusoidal embeddings
      ls-type:: annotation
      hl-page:: 2
      hl-color:: yellow

      • 三角函数
    • have used LSTMs to learn geospatial embeddings [29]
      ls-type:: annotation
      hl-page:: 2
      hl-color:: yellow

      • LSTM
    • [30 ] use grid embeddings of latitude and longitude in which the grid cell is augmented with the relative distances between the original point and the four corners of grid.
      ls-type:: annotation
      hl-page:: 2
      hl-color:: yellow

      • 格子
    • In [15 ], latitude and longitude are embedded separately over uniform grids to reduce cardinality, and graph pretraining is used to incorporate road network connectivity information for each origin and destination.
      ls-type:: annotation
      hl-page:: 2
      hl-color:: yellow

  • A wide and deep recurrent network was proposed to capture spatial-temporal information [27]. This model uses a cross-product of embeddings to learn feature interactions, which is commonly used in recommendation systems
    ls-type:: annotation
    hl-page:: 2
    hl-color:: yellow

    • [[@Learning to Estimate the Travel Time]]

Routing Engine ETA

  • The begin and end location neighborhoods of a request account for a large proportion of noise.
    ls-type:: annotation
    hl-page:: 2
    hl-color:: yellow
    • 上下车点偏差带来 RE-ETA 预估不准确

特征

  • [:span]
    hl-type:: area
    hl-stamp:: 1675210287675
    hl-page:: 3
    ls-type:: annotation
    系统的挑战性

  • firstly, the RE-ETA data and the residual distribution are skewed and have long tails.
    ls-type:: annotation
    hl-page:: 3
    hl-color:: green

    • 数据分布倾斜以及长尾

      • [:span]
        ls-type:: annotation
        hl-page:: 3
        hl-color:: yellow
    • Log-transformation is usually used for normalizing skewed data distribution. 通常使用对数变换来处理这个问题
      hl-page:: 3
      ls-type:: annotation

      • transforming the log-scale prediction back to the original scale by exponentiation usually results in some extreme values, which may affect user experience. 预测结果需要经过 exp 还原,可能产生异常值
        hl-page:: 3
        ls-type:: annotation
    • We propose to solve this issue by using an asymmetric loss function.
      ls-type:: annotation
      hl-page:: 3
      hl-color:: yellow

      • asymmetric Huber loss function

  • Secondly, heterogeneity of data is due to multiple trip/request types;
    ls-type:: annotation
    hl-page:: 3
    hl-color:: green

    • 网约车 ETA 和 配送 ETA 分布不一致(数据异构性)

      • [:span]
        ls-type:: annotation
        hl-page:: 3
        hl-color:: yellow
    • we design a model structure to deal with trip heterogeneity specifically
      ls-type:: annotation
      hl-page:: 3
      hl-color:: yellow

  • Thirdly, this post-processing system needs to handle a large volume of requests with a low latency.
    hl-page:: 3
    ls-type:: annotation

    • 低延迟

DeeprETA Post-Processing System

  • [:span]
    hl-type:: area
    hl-stamp:: 1675210539620
    hl-page:: 4
    ls-type:: annotation
  • an Embedding module

ls-type:: annotation
hl-page:: 3
hl-color:: yellow
+ #### 特征处理 #[[Feature Engineering]]

  + calibration features

ls-type:: annotation
hl-page:: 3
hl-color:: yellow
+ 区分是什么类型 ETA 请求

    + The calibration features convey different segments of the trip population such as whether it is a delivery drop-off or ride-sharing pick-up trip.

ls-type:: annotation
hl-page:: 3
hl-color:: yellow
+ we found discretizing and embedding all the features provided a significant accuracy lift over using continuous features directly. 特征离散化 + embedding 有显著效果提升
hl-page:: 3
ls-type:: annotation
+ Categorical features
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
+ Continuous features
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
+ quantile bucketizing function 数值等频分桶
hl-page:: 4
ls-type:: annotation
+ 等频分桶效果优于等距分桶

          + We found that using quantile buckets provided better accuracy than equal-width buckets, similar to other literatures have suggested [19 ]

hl-page:: 4
ls-type:: annotation
+ 分位数分桶单位bit下传达更多原始特征信息

          + One explanation is that for any fixed number of buckets, quantile buckets convey the most information in bits about the original feature value compared to any other bucketing scheme.

ls-type:: annotation
hl-page:: 4
hl-color:: yellow
+ Geospatial features
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
+ ek=Ek[H(xk)]\boldsymbol{e}_k=E_k\left[H\left(x_k\right)\right]

      + 为什么这么做?

        + 唯一字符串表示地理信息,然后再对字符串做 embedding

        + The idea is to first obtain a unique string to represent the2D geospatial information and then map the string to a unique index for embedding look-ups.

ls-type:: annotation
hl-page:: 4
hl-color:: yellow
+ [[Geohash]]
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
+ geohash(lat, lng, u) => encoded geohash strings

          + u 指定 string 长度

          + 将 lat, lng 转换成 [0,1] 之间浮点数,再转换成整数,最后用 base32 编码成字符串

          + [:span]

hl-type:: area
hl-stamp:: 1676206598188
hl-page:: 4
ls-type:: annotation
+ [:span]
ls-type:: annotation
hl-page:: 4
hl-color:: red
+ Feature hashing 将 encoded geohash strings 变成 index
hl-page:: 4
ls-type:: annotation
+ Exact indexing
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
+ 每个 grid cell 有单独 embdding,geohash 精度越高,该方法内存消耗越大

        + Multiple feature hashing

ls-type:: annotation
hl-page:: 4
hl-color:: yellow
+ 使用多个哈希函数将格子转化成 index,减少哈希冲突

        + 细节

          + 起点经纬度、终点经纬度、起终点对经纬度都做为特征

          + MurmurHash 使用不同的种子初始化

          + 使用 $u \in \{4,5,6,7\}$,多种大小的格子,减少数据稀疏性影响
  • a Two-layer Module

ls-type:: annotation
hl-page:: 3
hl-color:: yellow
+ Interaction layer
ls-type:: annotation
hl-page:: 5
hl-color:: yellow
+ 每一个向量代表一个独立特征,无顺序要求(不需要位置编码)

    + each vector represents a single feature

ls-type:: annotation
hl-page:: 5
hl-color:: yellow
+ [:span]
ls-type:: annotation
hl-page:: 5
hl-color:: red
+ Linear self-attention

    + 输入矩阵 $L*d,L >> d$

    + attention 矩阵计算速度太慢

      + [[linear transformer]] [[Linformer]] [[performer]]

    + $\begin{aligned} V_i^{\prime} & =\frac{\sum_{j=1}^L \phi\left(Q_i\right)^T \phi\left(K_j\right) V_j}{\sum_{j=1}^L \phi\left(Q_i\right)^T \phi\left(K_j\right)} \\ & =\frac{\phi\left(Q_i\right)^T \sum_{j=1}^L \phi\left(K_j\right) V_j}{\phi\left(Q_i\right)^T \sum_{j=1}^L \phi\left(K_j\right)}\end{aligned}$

      + $\phi(x)=\operatorname{elu}(x)+1=\max \left(\alpha\left(e^x-1\right), 0\right)+1$

    + $f\left(X_{e m b}\right)=V^{\prime}+X_{e m b}$

      + 复杂度: $O(Ld^2)$

+ Calibration layer

ls-type:: annotation
hl-page:: 5
hl-color:: yellow
+ 输入请求 ETA 类型,得到一个对应的偏置

  + $\hat{r}_{\mathrm{ij}}=\hat{f}_2\left(\hat{f}\left(X_{i_{\mathrm{emb}}}\right)\right)+\hat{b}_j\left(X_{i_{\mathrm{type}}}\right)$

    + $b_j$ 第 j 种类型 ETA 的偏置(可学习)

    + f Interaction 层

    + f2 全连接层

  + 优点

    + 相当于对预测结果进行整体偏移,最小时间成本

  + [[MMoE]] 或 [\[\[Multi-Head Attention\]\]](/post/logseq/Multi-Head%20Attention.html)

    + We also tried the multi-heads structure and mixture of expert structure

ls-type:: annotation
hl-page:: 6
hl-color:: yellow
+ ReLU 限制预测值范围

5 MODEL TRAINING AND SERVING

ls-type:: annotation
hl-page:: 6
hl-color:: yellow

  • 不同类型 ETA 任务需要用不同的指标来评估

    • when ETA is used for calculating fares, mean ETA error is important
      hl-page:: 6
      ls-type:: annotation
    • evaluating delivery ETA requests, not only the mean absolute ETA error, but also the 95th quantile is important.
      ls-type:: annotation
      hl-page:: 6
      hl-color:: green
  • asymmetric Huber loss function

    • 对异常值鲁棒性更好,可以平衡多种常用的点估计指标

    • L(ω,δ,Θ;(q,y0),y)={ωL(δ,Θ;(q,y0),y),y<y^(1ω)L(δ,Θ;(q,y0),y),yy^\mathcal{L}\left(\omega, \delta, \Theta ;\left(\boldsymbol{q}, y_0\right), y\right)= \begin{cases}\omega \mathcal{L}\left(\delta, \Theta ;\left(\boldsymbol{q}, y_0\right), y\right), & y<\hat{y} \\ (1-\omega) \mathcal{L}\left(\delta, \Theta ;\left(\boldsymbol{q}, y_0\right), y\right), & y \geq \hat{y}\end{cases}

      • L(δ,Θ;(q,y0),y)={12(yy^)2,yy^<δδyy^12δ2,yy^δ\mathcal{L}\left(\delta, \Theta ;\left(\boldsymbol{q}, y_0\right), y\right)= \begin{cases}\frac{1}{2}(y-\hat{y})^2, & |y-\hat{y}|<\delta \\ \delta|y-\hat{y}|-\frac{1}{2} \delta^2, & |y-\hat{y}| \geq \delta\end{cases}

        • ω[0,1],δ>0\omega \in[0,1], \delta>0 分别控制对高低估倾向以及异常值的容忍程度

          • that control the degree of robustness to outliers and the degree of asymmetry respectively.
            hl-page:: 6
            ls-type:: annotation

          • δ\delta 越大,对异常值越不敏感

          • 低估和高估有不同的权重(对业务影响不同)

        • Θ\Theta 代表模型参数

    • 优点:模拟其他回归损失函数以及使点估计满足多样性的业务指标

      • These parameters not only make it possible to mimic other commonly used regression loss functions, but also make it possible to tailor the point estimate produced by the model to meet diverse business goals.
        ls-type:: annotation
        hl-page:: 6
        hl-color:: yellow
  • 每周训练模型

6 EXPERIMENTS

ls-type:: annotation
hl-page:: 6
hl-color:: yellow

  • baseline methods

    • HammockNet
      ls-type:: annotation
      hl-page:: 6
      hl-color:: yellow

    • DeeprETANet

      • qkv d=4

      • fc size=2048

      • Adam as the optimizer and relative cosine annealing learning rate scheduler.
        ls-type:: annotation
        hl-page:: 7
        hl-color:: yellow

      • 变形

        • One variant is without feature hashing, i.e. simply using the geohash function and indexing the geohash string. 无 feature hashing
          hl-page:: 6
          ls-type:: annotation
        • The other variant is without the calibration layer 无校准层
          hl-page:: 6
          ls-type:: annotation
  • 评估指标

    • mean absolute error (MAE), 50th percentile absolute error (p50 error) and 95th percentile absolute error (p95 error
      ls-type:: annotation
      hl-page:: 7
      hl-color:: red
  • 数据集

    • The dataset consists of global ETA requests from Uber’s platform. The global data has two types of requests, one is ride-hailing and the other is eats delivery.
      ls-type:: annotation
      hl-page:: 7
      hl-color:: red
    • 14 天数据
  • 离线实验

    • p95 error 模型有无 feature hashing 表现相似,地理信息可能在典型 case 上有提升,但是不能改善极端错误

      • For the p95 error, DeeprETANet with and without feature hashing has similar performance. This result indicates that richer geospatial embeddings improve performance in typical cases but may not improve extreme errors
        ls-type:: annotation
        hl-page:: 7
        hl-color:: green
    • w/o calibration 层效果比 restnet 等方法差

    • 对数据采样,分析 RE-ETA 残差和模型 ETA 残差

      • We can also see the difference before and after DeeprETA post-processing from Figure 7, which visualize the bivariate distribution of the RE-ETA residual and the predicted ETA residual on a 1% sampled data. Although rides and delivery requests have quite different residual distributions, after post-processing the mean residual is closer to 0.
        ls-type:: annotation
        hl-page:: 7
        hl-color:: green
  • 6.5 Online experiments 在线实验
    ls-type:: annotation
    hl-page:: 8
    hl-color:: yellow

    • The median latency is 3.25ms and the 95th percentile is 4ms.
      ls-type:: annotation
      hl-page:: 8
      hl-color:: green
  • 6.6 Embedding Analysis
    ls-type:: annotation
    hl-page:: 8
    hl-color:: yellow

    • [[t-SNE]]

    • 1 temporal embedding

      • 深色 weekend 浅色 weekday

      • minute-of-week embedding 具有局部连续性,没有明确的周末或工作日效应

        • local continuity
          ls-type:: annotation
          hl-page:: 8
          hl-color:: green
      • one-dimensional manifold 一维流形

      • [:span]
        hl-type:: area
        hl-stamp:: 1675819746664
        hl-page:: 8
        ls-type:: annotation

    • 14 geospatial embeddings

      • 颜色代表 speed buckets
        hl-page:: 8
        ls-type:: annotation

      • 局部聚集性,相似的位置有相似的表示,不同 ETA 的表示部分相似

        • Similar locations are represented by similar positions in two-dimensional space. Interestingly, the high speed locations of rides and delivery requests do not all overlap.
          ls-type:: annotation
          hl-page:: 8
          hl-color:: green
      • [:span]
        hl-type:: area
        hl-stamp:: 1675819938929
        hl-page:: 9
        ls-type:: annotation
        7 CONCLUSION
        ls-type:: annotation
        hl-page:: 8
        hl-color:: yellow

  • 有这样分离架构(RE+模型)的任务都可以尝试使用这种方法提升效果

    • one of the benefits of our hybrid approach is that it is decoupled from the details of any particular routing engine implementation, and we expect that teams using other routing engines will be able to achieve similar accuracy improvements using our method.
      ls-type:: annotation
      hl-page:: 9
      hl-color:: yellow
      解决不同类型 ETA 数据异制性
  • 请求类型编码放到模型中学习

    • One is to embed request types for learning the interaction between the type features and others via the interaction layer.
      ls-type:: annotation
      hl-page:: 5
      hl-color:: yellow
  • 校准层,每个类型 ETA 都有一个 bias

    • The other way is through a calibration layer. The calibration layer consists of a fully connected layer and some bias parameters for each request type.
      ls-type:: annotation
      hl-page:: 5
      hl-color:: yellow

[:span]
ls-type:: annotation
hl-page:: 7
hl-color:: yellow


hls__PRML Note 前十一章_2023_淡蓝小点

[:span]
ls-type:: annotation
hl-page:: 59
hl-color:: yellow
如果先验和似然相乘得到的后验与先验有相同的函数形式,我们就说该先验是似然的共轭先验,也说后验分布和先验分布是共轭分布。
ls-type:: annotation
hl-page:: 61
hl-color:: yellow
是否共轭看的是后验是否和先验有相同的函数形式。
ls-type:: annotation
hl-page:: 61
hl-color:: yellow
在某些情况下,存在先验、后验、似然三者函数形式均相同的情况。
ls-type:: annotation
hl-page:: 61
hl-color:: green
x服从高斯分布时似然是高斯的,其均值的共轭先验也是高斯的,由共轭先验得到的后验也是高斯的,此时三者的函数形式都相同。
ls-type:: annotation
hl-page:: 61
hl-color:: green
我们说“伯努利分布的共轭先验是Beta 分布”
ls-type:: annotation
hl-page:: 62
hl-color:: green
我们一般不说“伯努利分布参数µ的后验分布和Beta共轭”
ls-type:: annotation
hl-page:: 62
hl-color:: green
我们倒是可以说“由Beta分布导致的伯努利分布参数µ的后验分布和Beta先验是共轭分布”
ls-type:: annotation
hl-page:: 62
hl-color:: green
ls-type:: annotation
hl-page:: 62
hl-color:: yellow
ls-type:: annotation
hl-page:: 62
hl-color:: yellow
理论上,我们应该从问题的实际出发,为参数引入最合理的先验,也就是我们应该从建模的合理性而不是从计算的方便性和可解释性出发选择先验。
ls-type:: annotation
hl-page:: 62
hl-color:: yellow
2-006
ls-type:: annotation
hl-page:: 62
hl-color:: purple
2-007
ls-type:: annotation
hl-page:: 63
hl-color:: purple
2-008
ls-type:: annotation
hl-page:: 63
hl-color:: purple
随着试验次数的增加,后验分布的不确定性会越来越小?
ls-type:: annotation
hl-page:: 63
hl-color:: yellow
随着试验次数的增加(数据集的变大),未知参数的取值越来越集中?
ls-type:: annotation
hl-page:: 63
hl-color:: yellow
答案是:在一般情况下,理论上的确有这样的趋势,但对于某些特定的数据集则不一定。
ls-type:: annotation
hl-page:: 63
hl-color:: yellow
在考虑了全部的数据集后,后验方差的均值总是小于等于先验方差。
ls-type:: annotation
hl-page:: 65
hl-color:: yellow
[:span]
ls-type:: annotation
hl-page:: 67
hl-color:: yellow


hls__Pattern recognition and machine learning_2006_Bishop

One role for the distributions discussed in this chapter is to model the probability distribution p(x) of a random variable x, given a finite set x1, . . . , xN of observations.
ls-type:: annotation
hl-page:: 87
hl-color:: yellow

sufficient statistic
ls-type:: annotation
hl-page:: 89
hl-color:: yellow

discrete random variables
ls-type:: annotation
hl-page:: 88
hl-color:: purple

  • 离散随机变量

parametric distribution
ls-type:: annotation
hl-page:: 88
hl-color:: purple

  • 参数分布

criterion
ls-type:: annotation
hl-page:: 88
hl-color:: purple

  • 标准

in a Bayesian treatment we introduce prior distributions over the parameters and then use Bayes’ theorem to compute the corresponding posterior distribution given the observed data.
ls-type:: annotation
hl-page:: 88
hl-color:: yellow

  • [[贝叶斯方法]] 流程

conjugate prior
ls-type:: annotation
hl-page:: 88
hl-color:: purple

  • 共轭先验

One limitation of the parametric approach is that it assumes a specific functional form for the distribution, which may turn out to be inappropriate for a particular application.
ls-type:: annotation
hl-page:: 88
hl-color:: purple

  • 参数化方法的一个限制是需要先假设分布的特定函数形式

calculus
ls-type:: annotation
hl-page:: 91
hl-color:: purple

  • [[微积分]]

In fact, we might wonder whether it is a general property of Bayesian learning that, as we observe more and more data, the uncertainty represented by the posterior distribution will steadily decrease.
ls-type:: annotation
hl-page:: 94
hl-color:: yellow
They can be used, for example, in real-time learning scenarios where a steady stream of data is arriving, and predictions must be made before all of the data is seen. Because they do not require the whole data set to be stored or loaded into memory, sequential methods are also useful for large data sets. Maximum likelihood methods can also be cast into a sequential framework.
ls-type:: annotation
hl-page:: 93
hl-color:: yellow

  • [[Bayesian Online Learning]]

hls__Interpreting Trajectories from Multiple Views_2022_Chen

most of them decompose a trajectory into several segments and then compute the travel time by integrating the attributes from all segments
ls-type:: annotation
hl-page:: 1
hl-color:: blue
multi-view trajectory representation
ls-type:: annotation
hl-page:: 1
hl-color:: yellow
a segment encoder is developed to capture the spatio-temporal dependencies at a fine granularity
ls-type:: annotation
hl-page:: 1
hl-color:: yellow
n adaptive self-attention module is designed to boost performance
ls-type:: annotation
hl-page:: 1
hl-color:: yellow
o characterize the natural trajectory structure consisting of alternatively arranged links and intersections
ls-type:: annotation
hl-page:: 1
hl-color:: yellow
realize a tradeoff between the multi-view spatio-temporal features
ls-type:: annotation
hl-page:: 1
hl-color:: yellow
[:span]
ls-type:: annotation
hl-page:: 2
hl-color:: green
[:span]
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
traditional ETA algorithms mainly employ the divide-and-conquer strategy by representing a trajectory as a segment sequence and then summing up the local predictions
ls-type:: annotation
hl-page:: 1
hl-color:: blue
segment-view representation is artificially produced to capture the fined-grained local traffic conditions, which is however not comprehensive in characterizing the natural structure of the road network
ls-type:: annotation
hl-page:: 1
hl-color:: green
preserve static road characteristics, such as pavement type, road width and road functional level
ls-type:: annotation
hl-page:: 1
hl-color:: green
valued information such as the waiting time, the number of traffic lights, and the historical traffic volume
ls-type:: annotation
hl-page:: 1
hl-color:: green
the link- and intersection-views characterize the trajectory attributes from a coarse perspective; a link can be further decomposed into several segments, and hence the segment-view representation models the spatial dependencies at a fine granularity
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
On the one hand
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
However, without explicitly modeling the link-view characteristics, existing studies can hardly model the coherent consistency across segments within the same links.
ls-type:: annotation
hl-page:: 2
hl-color:: red
On the other hand
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
Hierarchical Self-Attention Network for Estimating the Time of Arrival
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
HierETA exploits the hierarchical relationship among the three views to portray the underlying road structure
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
proposed hierarchical self-attention network organizes the segment-, link-, and intersection-views efficiently according to their natural relationships.
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
adaptive self-attention network to jointly leverage the global and local patterns for spatio-temporal dependency modeling within the multi-view representation framework.
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
hierarchy-aware attention decoder
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
GMAN [ 50] employs a graph multi-attention structure to extract the spatial and temporal relationships
ls-type:: annotation
hl-page:: 2
hl-color:: green
graph representation learning generally suffers from the negative impact from irrelevant spatial neighboring regions, resulting in error propagation especially when the involved area grows larger
ls-type:: annotation
hl-page:: 2
hl-color:: green
graph modeling is limited to process only narrow neighboring regions and falls short on developing large-scale urban-wise systems
ls-type:: annotation
hl-page:: 2
hl-color:: yellow
DeepTTE
ls-type:: annotation
hl-page:: 3
hl-color:: yellow
DeepGTT
ls-type:: annotation
hl-page:: 3
hl-color:: yellow
learns the representation of spatio-temporal information using a multi-relational network;
ls-type:: annotation
hl-page:: 3
hl-color:: blue
extracts the travel speed and representation of road network from historical trajectories based on tensor decomposition and graph embedding.
ls-type:: annotation
hl-page:: 3
hl-color:: blue
we design an adaptive self-attention network to explicitly capture the spatio-temporal dependencies of the trajectory using multi-view sequences
ls-type:: annotation
hl-page:: 3
hl-color:: yellow
Attribute Feature Extractor
ls-type:: annotation
hl-page:: 3
hl-color:: yellow
Hierarchical Self-Attention Network for Multi-View Trajectory Representation
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
Hierarchy-Aware Attention Decoder
ls-type:: annotation
hl-page:: 5
hl-color:: yellow
capture the spatiotemporal dependencies of segments in the same link
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
a local semantic pattern
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
a gating mechanism
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
Joint Link-Intersection Encoder.
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
the joint link-intersection encoder also includes a self-attention layer, a residual connection and a layer normalization
ls-type:: annotation
hl-page:: 5
hl-color:: yellow
as links and intersections appear alternatively
ls-type:: annotation
hl-page:: 4
hl-color:: yellow
coarse-scale representation
ls-type:: annotation
hl-page:: 4
hl-color:: red
t fails to model the consistency shared within the same link
ls-type:: annotation
hl-page:: 4
hl-color:: red
employ two BiLSTMs to respectively encode the links and intersections
ls-type:: annotation
hl-page:: 5
hl-color:: yellow
local pattern
ls-type:: annotation
hl-page:: 5
hl-color:: red
segment-view context feature that captures the local traffic conditions
ls-type:: annotation
hl-page:: 5
hl-color:: yellow
joint link-intersection context feature that preserves the common road attributes
ls-type:: annotation
hl-page:: 5
hl-color:: yellow
separately processing each segment without considering the link-view correlation is problematic as it lacks the feedback from the link-view consistency.
ls-type:: annotation
hl-page:: 5
hl-color:: red
attention guidance that adopts the link-view consistency to further adjust the segment-view attention
ls-type:: annotation
hl-page:: 5
hl-color:: red
we can adaptively select the most relevant features from different representation granularities.
ls-type:: annotation
hl-page:: 5
hl-color:: yellow
travel time estimation is closely related to the critical components
ls-type:: annotation
hl-page:: 5
hl-color:: green
EXPERIMENTS
ls-type:: annotation
hl-page:: 5
hl-color:: green
probability density functions (PDFs) and cumulative distribution functions (CDFs)
ls-type:: annotation
hl-page:: 5
hl-color:: green
[:span]
ls-type:: annotation
hl-page:: 6
hl-color:: yellow
We repeat each experiment for five times except the statistics-based approach Route-ETA and report the mean and the standard deviation of different runs.
ls-type:: annotation
hl-page:: 6
hl-color:: green
mean absolute error (MAE), root mean squared error (RMSE), mean absolute percentage error (MAPE), and satisfaction rate (SR), similar to existing approaches [ 23 ]. Specifically, SR refers to the fraction of trips with error rates less than 10% and a higher SR indicates better performance and customer satisfaction
ls-type:: annotation
hl-page:: 6
hl-color:: green
[:span]
ls-type:: annotation
hl-page:: 7
hl-color:: yellow
ConstGAT considers the graph structures of the road network to exploit the joint relations of spatio-temporal information.
ls-type:: annotation
hl-page:: 7
hl-color:: blue
[:span]
ls-type:: annotation
hl-page:: 7
hl-color:: green
That is, interpreting the trajectory from multiple views effectively portrays the hierarchical structure of road network and eases the error propagation for estimating the travel time.
ls-type:: annotation
hl-page:: 7
hl-color:: green
window sizes
ls-type:: annotation
hl-page:: 8
hl-color:: green
[:span]
ls-type:: annotation
hl-page:: 8
hl-color:: yellow
he correlation between adjacent segments slightly decreases while the modeling uncertainty increases.
ls-type:: annotation
hl-page:: 8
hl-color:: green
[:span]
ls-type:: annotation
hl-page:: 8
hl-color:: green
The local attention in encoder is removed to verify the effectiveness for modeling the semantic traffic condition.
ls-type:: annotation
hl-page:: 8
hl-color:: green
verify the necessity of extracting the structural traffic pattern.
ls-type:: annotation
hl-page:: 8
hl-color:: green
removing the joint link-intersection encoder
ls-type:: annotation
hl-page:: 8
hl-color:: green
HierETA performs better than both variants that eliminating local and global attentions, which is contributed to the introduction of the global structural and local semantic patterns.
ls-type:: annotation
hl-page:: 8
hl-color:: yellow


hls__科学研究与论文写作_2020_钟澄

同义词库的构造
ls-type:: annotation
hl-page:: 17
检索式的构造
ls-type:: annotation
hl-page:: 17
知识库的建立
ls-type:: annotation
hl-page:: 17
知识库的更新和完善
ls-type:: annotation
hl-page:: 18
、图片/文字切块-归纳-重组阅读法
ls-type:: annotation
hl-page:: 32
[:span]
ls-type:: annotation
hl-page:: 36
将这些文献中的图片批量地按顺序提取出来到一个文档中
ls-type:: annotation
hl-page:: 33
这些图片后期还会做归纳分类,打乱顺序,因此提取图片过程中还要做好索引,以便后期也能知道这些图片是来自什么文献的
ls-type:: annotation
hl-page:: 33
,通过浏览这些图片,可以快速了解如下信息:本文做的是什么体系?创新点或者贡献在什么地方 ?研究了哪些内容?采用了哪些研究方法?得到了什么结论?还有哪些值得进一步研究的地方
ls-type:: annotation
hl-page:: 33
如果我们来设计实验的话,大致应该如何设计?如果我们来撰写论文的话,应该如何编排图表
ls-type:: annotation
hl-page:: 33
将同一类型的图片都归纳整合在这个文档中,便于我们迅速对比和浏览同类图片,快速获得感兴趣的信息
ls-type:: annotation
hl-page:: 35


how to read a paper

[[标记分类]] 不要想着直接抄袭其他人的方案,自己去探索,如果都不知道怎么做,那么从最简单开始,可以从 [[@Elftmann Highlighting]] 获得参考吗?

  • 黄色:重点

  • 红色:疑问

根据文章结构去阅读

  • 引言

    • 提出什么问题

    • 前人的工作

    • 自己工作如何解决上面提到的问题

  • [[Introduction]]

  • 相关工作

    • 别人的工作

    • 你和他们的区别

  • 结论


interval forecasting

通过统计学方法预估区间

  • 区间估计法

    • 假设待估计值服从正态分布,计算这个值的标准差,然后给定某个置信度,查表得到 z 值。均值加减 z值乘标准差结果,得到左右区间。

    • 区间预测中应用

      • 假设预测误差服从均值为 0 的正态分布,估计预测误差的标准差

      • 给定置信度,查表得到 Z 值

      • 计算预测误差的上下限:z*标准差

      • 将上下限加到预测值里面,得到一个预测区间

    • 如何预测标准差

      • 用总体标准差近似样本标准差

        • 训练集划分出一个验证集,用验证集上的预测误差来估计标准差
  • [[Bootstrap]] 通过采样 N 次的预测误差,取N次误差的分位数作为上下限,不需要假设误差服从正态分布。

    • 例子,三次采样结果 [-50,0,50],5% 分位数 -45

    • 随机森林

  • [[Monte Carlo]] Dropout

    • nn 模型在 inference 阶段保留 dropout 结构,对 x 的每次预测都可以看成是一次抽样

定义特定的损失函数来输出区间

  • 直接拟合上下界 [[@High-Quality Prediction Intervals for Deep Learning: A Distribution-Free, Ensembled Approach]]

  • [[分位数回归]]

    • QL(y,y^,q)=q(yy^)++(1q)(y^y)+Q L(y, \hat{y}, q)=q(y-\hat{y})_{+}+(1-q)(\hat{y}-y)_{+} #card

    • 应用

      • 指定三个分位数(0.1,0.5,0.9),把这三个分位数损失加起来作为最终的损失函数。

      • [[MQRNN]] [[MQCNN]]

      • lightgbm和 xgboost 的 objective 也支持 quantile 选项

  • 负对数似然损失 #card

    • [[DeepAR]] 指定预测值服从的概率分布,利用神经网络预测概率分布的参数,构造负对数似然作为损失函数,优化损失函数得到概率分布的参数。

      • 预测时通过蒙特卡洛采样的方式生成预测值和区间预测

      • 采样 100 次,均值就是点预测结果,95% 和 5% 分位数对应区间预测的结果

工具

  • GluonTS

  • Darts

  • MAPIE

Ref


inductive bias

先验知识以及假设

  • 算法对学习问题做的假设

归纳偏置

  • 归纳和演绎 induction deduction

  • 从一些例子中寻找共性、泛化,形成一个比较通过的规则的过程

  • 偏置代表对模型的偏好

  • 用规则约束模型,从而起到模型选择

    • 将无限可能的目标函数约束在一个有限的类别假设中

    • 近似损失 + 估计损失(更宽松的假设会增大这个损失)

常见的例子

  • [[奥卡姆剃刀]] :-> 希望学习到的模型复杂度更低

  • [[KNN]] :-> 特征空间中相邻的样本倾向于属于同一类

  • SVM 好的分类器 应该 最大化类别边界距离

  • [[RNN]] :-> 每一个时刻的计算依赖历史计算结果

    • sequentiality

    • time invariance

      • 序列顺序上的 timesteps 有联系
    • 时间变换不变性

      • 权重共享
  • 双向 RNN

    • RNN 假设当前输入和之前的输入有关系,双 RNN 假设当前输入和之前、之后的输入都有关系
  • [[DNN]] :-> 信息应该逐级加工,层层抽象

  • [[CNN]] :-> 信息具有空间局部性,滑动卷积共享权重方式降低参数空间

    • locality

    • spatial invariance

      • 空间相近的 grid elements 有联系而远的没有
    • 空间变换不变性 translation invariant

      • kernel 权重共享
  • [[GNN]] 连接不变性

  • [[Attention]]

  • [[Word2Vec]] :-> A word’s meaning is given by the words that frequently appear close-by.

    • 结构相似性

    • 例子:猫和狗在语料中没有同时出现,但是他们的上下文完全一致,所以最终 embedding 相似。

      • 我有一只猫。

      • 我有一只狗。


logseq-anki-sync

挖空卡片

  • 使用 {{}} 包围需要挖空的内容

  • {{ 之前需要有一个空格,适合英文,中文看起来比较奇怪。

带公式或代码的填空

1
2
3
replacecloze:: " '\sqrt{ a^{2}+b^{2} }' "
The Pythagorean theorem is
$$c=\sqrt{ a^{2}+b^{2} }$$

Making multiline cards · debanjandhar12/logseq-anki-sync · Discussion #88

  • 多行卡片,父节点打上 card 标签

image.png

  • 多行增量卡片,父节点打上 incrementalcard 标签,实现复习时遮盖一行展示其他行。

image.png

  • 指定卡片方向卡片,分别用 #forward(默认卡片方向), #reversed#bidirectional 标签;或者使用 direction property direction:: ->direction:: <-direction:: <->

image.png

  • #depth-n 指定展示 child 节点的数量,#depth-1 只展示一级子节点

  • 不同步卡片 #no-anki-sync

  • 批量转成卡片 You can use the #card-group tag to turn all the children of it’s block to cards

指定卡组

  • 支持全局和单独 block

  • deck: : Tutorial

Swift Arrow cards

  • 语法 : - > or : < - or : < - >
  • 类似于 [[Remnote]] 中的卡片功能

logseq/query

基础

query-table:: false
query-properties:: [:title :tags]

  • ``

  • ``

advanced query

  • 获取包含 #Paper 标记笔记中的所有 todo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{{< logseq/orgQUERY >}}{:title [:h2 "Doing"]
:query [:find (pull ?b [*])
:where
[?p :block/name]
; 取page的page-properties
[?p :block/properties ?prop]
; 取page-properties中“publication-title:: value1, value1, value3”的值
; 即: 取出列表“value1, value1, value3”
[(get ?prop :tags) ?v]
[(contains? ?v "Paper")]
[?b :block/page ?p]
[?b :block/marker ?m]
[(= ?m "TODO")]
]
}
{{< / logseq/orgQUERY >}}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{{< logseq/orgQUERY >}}; 以下注释是我查找网上文章结合自己的理解,不一定对
; '?xxx' 表示一个变量
; '$' 表示数据库
; ':xxx' 表示字段和查询关键字
{:title [:h2 "Todo"]
:query [:find (pull ?b [*]) ;找到所有符合条件的条目,'*' 表示条目的所有字段
:in $ ?category ;'?category' 就是通过 'inputs' 传过来的变量
:where
[?b :block/ref-pages ?p] ;条件语句用 '[]' 表示,?p 是什么下面会说明
[?p :block/properties ?pr] ;?p 是包含了 properties 为 ?pr 的页面,?pr 是什么,下面会说明
[(get ?pr :category) ?t] ; get 是获取 object 的属性,并将它设置为 ?t
[(contains? ?t ?category)]; contains?(注意'?'在后面)表示 predict,也就是符合特定条件
(not [?b :block/marker ?m]); not [xxx] 表示对 [xxx] 的结果取反
]
:inputs ["Programming"] ; 传入一个参数
}
{{< / logseq/orgQUERY >}}
+ 找到标记为 TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{{< logseq/orgQUERY >}}{:title [:h2 "Doing"]
:query [:find (pull ?b [*])
:in $ ?category
:where
[?b :block/marker ?m]
[(= ?m "TODO")]
[?b :block/ref-pages ?p]
[?p :block/properties ?pr]
[(get ?pr :category) ?t]
[(contains? ?t ?category)]
]
:inputs ["Programming"]
}
{{< / logseq/orgQUERY >}}

Ref


long-tailed

常用解决方法

  • 重采样 re-sampling

    • 过采样 oversampling,增加数量少的类别样本

      • 增加正样本使得正负样本数目接近

      • 原始正类之间插值来生成额外的正类

    • 欠采样 undersampling,剔除一些数量多的类别样本

      • 去除负样本使得正负样本数目接近

      • 将负样本划分成多个集合供不同的学习器使用

  • 数据合成

    • 样本增加高斯噪声 data smoothing

    • SMOTE

      • 随机选取一个正样本,然后用 k 近邻选取一个与其最相似的样本,取两个样本中值或者均值,作为新样本。
  • 重加权 re-weighting

    • 通过样本权重或者 loss 权重给数量多的类别降权,给数量少的类别加权。

    • [[F1 Reweight Loss]] 调节二分类模型 recall/precision 相对权重的损失函数

      • [[F1 Score]]

      • F_beta

        • Fβ=(1+β2) precision  recall (β2 precision )+ recall F_\beta=\left(1+\beta^2\right) \cdot \frac{\text { precision } \cdot \text { recall }}{\left(\beta^2 \cdot \text { precision }\right)+\text { recall }}
      • β\beta 大于 1,重 recall,小于 1 关注准确

  • 增加辅助任务

    • 引入自监督对比学习
  • 迁移学习 tranzsfer learning

  • 度量学习 metric learning

  • 阈值移动 threshold-moving

    • 二分类中将 0.1 当成是正样本

      • 模型倾向于样本多的部分
    • 再缩放 rescalling

  • 模型融合

    • 0.1 正样本,0.9 负样本,负样本拆成 9 份。利用负样本和正样本训练 9 个模型,加权得到最后的结果

分类机器学习中,某一标签占比太大(标签稀疏),如何学习? - 知乎 (zhihu.com)

  • 难易样本不均衡还是正负样本不均衡

    • [[Focal Loss]] 针对困难样本,标签稀疏不一定是困难样本。

logseq/tips

同步

  • 自带 git 同步会导致卡顿,可以使用插件市场的 git 插件手动同步。

笔记指定 type,通过 query 语法聚集不同的 type 的笔记,生成例如论文阅读清单之类的。

  • [[Book]]

  • [[Paper]]

  • [[People]]


on-demand food delivery

派单策略

  • 召回距离

  • 派单距离

  • 拼单上限

难点

  • 出餐时间如何预估?

  • 多任务学习

配送 ETA 分类

image.png

分单挑战

image.png

配送 ETA 和出行 ETA 对比

  • 为什么配送 ETA 是从用户下单到送达,出行 ETA 是从起点到终点的时间?为什么出行不预估从发单到到达终点的时间?

    • 骑手数量供给远大于网约车司机

TODO 配送相关主题阅读 #XXX

image.png


ordinal regression

五分类例子

  • 模型输出 z 后经过 sigmoid f(z)=11+exp(z)(0,1.0)f(z)=\frac{1}{1+exp(-z)} \in (0, 1.0)

  • 五分类相当于在 fz 的空间上找到 4 个切分点,用 P(x<θ1),P(θ1<x<θ2),P(θ2<x<θ3),P(θ3<x<θ4),P(θ4<x<+)P\left(x<\theta_{1}\right), P\left(\theta_{1}<x<\theta_{2}\right), P\left(\theta_{2}<x<\theta_{3}\right), P\left(\theta_{3}<x<\theta_{4}\right), P\left(\theta_{4}<x<+\infty\right) 表示 x分别属于 5 个级的概率

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class OrdinalRegressionLoss(nn.Module):

def __init__(self, num_class, train_cutpoints=False, scale=20.0):
super().__init__()
self.num_classes = num_class
num_cutpoints = self.num_classes - 1
self.cutpoints = torch.arange(num_cutpoints).float()*scale/(num_class-2) - scale / 2
self.cutpoints = nn.Parameter(self.cutpoints)
if not train_cutpoints:
self.cutpoints.requires_grad_(False)

def forward(self, pred, label):
sigmoids = torch.sigmoid(self.cutpoints - pred)
link_mat = sigmoids[:, 1:] - sigmoids[:, :-1]
link_mat = torch.cat((
sigmoids[:, [0]],
link_mat,
(1 - sigmoids[:, [-1]])
),
dim=1
)

eps = 1e-15
likelihoods = torch.clamp(link_mat, eps, 1 - eps)

neg_log_likelihood = torch.log(likelihoods)
if label is None:
loss = 0
else:
loss = -torch.gather(neg_log_likelihood, 1, label).mean()

return loss, likelihoods

Ref


password

破译密码的复杂度主要在于密码的长度,包括我在内的大部分人很难记住上百个不同密码。这时候推荐使用密码软件:自动生成长密码,网页和 App 自动填充。当然,如果密码软件泄漏,完全没有办法。

我使用过的密码软件有:

  • LastPass:比较简单,只使用过 chrome 插件功能。

  • 1PassWord:全平台,ui 美观,功能强大。除了能保存密码外,还能保存一些简单的笔记。~~目前主力使用,~~贵的东西除了贵就没有其他缺点了。

  • [[Bitwarden]] 基础功能免费 + 高级功能收费(2FA) 。官方提供 docker 镜像,可以私有化部署,该版本解锁全部会员功能。

    • 提供 iOS、Mac、Chrome 端
  • KeePass:开源方案,提供多种第三方客户端。所有数据保存在单一的文件中,安全性高,但是会带来跨平台同步问题。

    • MacOS

      • MacPass:node.js 开发, ui 简洁。

        • Auto-type 全局快捷键,不知道为什么在 qq 客户端上不能使用,看提示是 window 找不到,简单看了一下,感觉是软件功能比较弱。
      • KeeWeb:qt 开发,ui 古典。

        • Auto-type: 打开需要输入密码的软件,光标移动到输入框,然后打开 KeeWeb,按下 cmd+T,就能完成自动填充。

        • 打不开“KeeWeb-1.12.0.mac.dmg”,因为 Apple 无法检查其是否包含恶意软件。

          • sudo spctl --master-disable
      • KeePassXC:据说功能强大

    • Chrome 通过插件 KeePassHttp-Connector 来配合客户端实现网页上的密码填充。

    • iOS 中推荐 FantasyPass(12 元),支持 faceid、touchid 打开,支持网页和 app 的自动填充。

KeePass

  • KeePass 这类软件在实现上有一个缺点:一条密码记录只能对应一个 website?如果有多个网址,就必须创建多条记录。这样带来的烦恼,是如果改变这个帐号对应的密码,就需要一个个修改。

  • MacPass 中可以复制一个项目,然后选择引用用户名和密码。KeeWeb 中不知道如何解决


ppxu@如何高效地读完一周的 CNS?

[[ppxu 讲解例子]]

如何锻炼阅读文献的能力呢?如何快速获取一篇文章的要点呢?Reference #card

  • 进入实验室的新生需要在每周一的组会上讲解上一周 CNS 杂志上跟生物医学相关的全部文献

  • 由于 Nature 是北京时间周四凌晨更新,Science 是周五凌晨,而 Cell 是半月刊,因此对于新生而言,需要在三天左右的时间消化 10~25 篇(没有 Cell 的话 10 篇左右,有 Cell 的话再加 10~15 篇)最前沿的学术文章,并且做成 PPT 汇报。

  • 有时候新生还有课程和实验,因此时间就显得更紧张,进实验室的第一年,周末基本上都用来看文献了。还好 Reference 并不需要讲的很细,但也得讲成一个自圆其说的小故事。

作为直博三年级的学生,Reference 本来跟我的关系已经不大了,但是为了给新生示范一下如何讲解文献,因此我在本周的组会上汇报了上周 CNS 上的生物医学相关的全部文献,一共 28 篇。#card

  • 我自己看了 3 天(不能算高效,但在高效的路上),感觉看到缺氧,一方面是因为文章虽然都跟生物医学相关,但是涉及的领域实在千差万别,需要一定的基础知识才可以消化;另外还有部分文章真的脑洞大开,思路新奇,几乎超出了我目前的理解范畴,只能读个大概。

  • 下面我从切身的体验出发,聊一下自己的一些浅薄的想法。

  • 最后,也将我花了很多时间整理的上周的 CNS 生物医学相关的文献要点和 PPT 分享给大家。

如何快速消化一篇文献?拿到一篇文献后,不妨先问自己几个问题:#card #incremental

  • (1)这篇文章属于什么领域或方向?

  • (2)解决了什么问题?为什么这个问题这么重要?

  • (3)使用了什么方法和模型?为什么这个方法可以解决这个问题?

    • 带着问题读文献,明白每一段需要干什么
  • (4)核心结论是什么?下一步还可以怎么做?

#card 使用人为的坐标来精确定位文献在生物医学中的具体位置,久而久之,将这些散落的知识点联结起来,最后形成一张知识网络。

  • 纵向来看,生物过程包括个体层面、组织器官层面、细胞层面、分子层面以及原子层面等。

  • 横向切分,这个过程属于什么范畴,比如表观遗传学、免疫、神经生物学、发育生物学等。

  • 现阶段的文献,分子层面的机制偏多。由中心法则延展开来,分子无非 DNA、RNA 和蛋白质,这些分子的排列组合起来参与一些特定的过程,比如 DNA 复制、DNA 转录、RNA 翻译、RNA 修饰、组蛋白修饰、非组蛋白修饰等等。当然还有染色体整体层面出发的,比如染色体高级结构调控等。

积累细分领域知识:每次读论文发现一个新的研究方向或主题,创建一个对应的文件夹#card

  • 归类的过程也是慢慢消化和整理的过程。尽量让读过的文献逐渐融入自己的知识体系,而不是读过就读过了。

  • 当文献是孤零零时,你很难记住成千上万个孤零零的知识点;但是一旦成为体系,就更容易记住了,此为内化。

image.png

  • 比如很火热的【RNA修饰&二级结构&编辑】二级目录

image.png

(2)这篇解决了什么问题?为什么这个问题这么重要?#card

  • 我老板经常在组会上问我们的一个问题是,这篇文章为什么能发在 CNS 上?如果这个问题能回答清楚,其实文章基本上也就消化了。

  • 能发在 CNS 上的研究每一篇都有故事,我们需要挖掘这背后的故事:

    • 有的是困扰学术界几十年的难题,今天终于获得解答,比如施一公他们关于剪接体结构的解析;

    • 有的是颠覆人们认知的新发现,比如此前人们认为,脑中没有淋巴管,但 2018 年 8 月 9 日的 Nature 封面文章就报道,在大脑中清楚地观察到了脑膜淋巴管;

    • 还有的是让几十年的争论尘埃落定,比如终于发现了引力波。

  • 在文章的第一句,作者通常就会说明自己为什么要做这个研究,以及这个研究为什么这么重要;而且会在文章的第一段或者第一部分进行详细的说明,多花时间思考这个问题远胜于你花时间弄懂每一幅图说什么。

(3)这篇文章使用了什么方法和模型?为什么这个方法可以解决这个问题?#card

  • 对于 Nature 的 Articles、Science 的 Research Articles 以及 Cell,每一部分都有小标题,快速浏览后,我们可以知道这篇文章分为几个部分,每个部分作者打算做什么工作。对于 Nature 的 Letters 和 Science 的 Reports,不妨先看每一段的第一句话,就可以知道该部分要做什么。

(4)核心结论是什么?下一步还可以怎么做? #card

  • 文章的核心结果都在图里面,这个时候可以去看图了,这个图证明了什么,为什么能支持这个结论。如果你是这个研究方向的,那么最后很有必要看 Discussion 部分,作者会对文章的核心观点做一个回顾,并且会讨论下一步的计划,具有一定的启发性。

  • 其实哪怕我现在博士四年级,我也依然会碰到自己此前从来没接触的研究主题,但相比一年级,这种事情发生的概率要低得多。万一碰到自己不熟悉的,尤其是方法学的开发,会非常晦涩难懂,而且尤其对于* Nature* 和 Science,其篇幅是有规定的,因此要求作者极度凝练。碰到这种情况,不妨把摘要和 Introduction 部分多读几遍,读不懂反复读,亲测非常有效。书读百遍其义自见,文献亦然,古人诚不我欺也。

在文献阅读过程中,留意科学史,注意科学问题的延续性。比如这几年非常火热的相分离(phase seperation),#card

  • 你自己画一条时间线,哪一年谁最先发现这个现象,哪一年谁做出了关键突破。

  • 自己尝试写一个简短的综述,熟悉经典的工作以及行业的大牛,今后读起来会觉得:哦,这篇文章的作者是“老熟人”,他之前做出过什么重要的工作……


quantile regression

自变量与因变量的特定百分位数之间的关系建模

数据从小到大排列,q 分位数为 m 则表示该组数据中 100q% 的数据小于 m。满足q%的样本在曲线下方

特点

  • 分位数回归不会假设目标变量的分布

  • 分位数回归趋向于抑制偏离观测值的影响

MAE 是一种中位数的分位数回归

公式定义 #card

  • 条件概率 F(yX=x)=P(YyX=x)=E(1{Yy}X=x)F(y \mid X=x)=P(Y \leq y \mid X=x)=E\left(1_{\{Y \leq y\}} \mid X=x\right)

  • Qα=inf{y:F(yX=x)α}Q_\alpha=\inf \{y: F(y \mid X=x) \geq \alpha\}

分位数回归用途: #card

  • 区间预测(interval prediction),

  • 异常值检测(outlier detection)

单点损失函数–weighted absolute deviations #card

  • Lα(y,q)={αyq if y>q(1α)yq if yqL_\alpha(y, q)= \begin{cases}\alpha|y-q| & \text { if } y>q \\ (1-\alpha)|y-q| & \text { if } y \leq q\end{cases}

  • 整体优化目标

    • Qα(x)=argminqE{Lα(Y,q)X=x}Q_\alpha(x)=\arg \min _q E\left\{L_\alpha(Y, q) \mid X=x\right\}.

分位数回归可以通过随机森林实现 #card

  • 训练中单颗树每个落入叶子结点的样本权重占比

    • wi(x,θ)=1{XiR(x,θ)}#{j:XjR(x,θ)}w_i(x, \theta)=\frac{1_{\left\{X_i \in R_{\ell(x, \theta)}\right\}}}{\#\left\{j: X_j \in R_{\ell(x, \theta)}\right\}}.
  • 随机森林每个落入叶子结点样本权重占比

    • wi(x)=k1t=1kwi(x,θt)w_i(x)=k^{-1} \sum_{t=1}^k w_i\left(x, \theta_t\right)
  • 随机森林的预测结果

    • μ^(x)=i=1nwi(x)Yi\hat{\mu}(x)=\sum_{i=1}^n w_i(x) Y_i.

随机森林本质上在approximate the conditional mean E(YX=x)E(Y \mid X=x) ,因此考虑用 #card

总结通过随机森林得到分位数回归的过程 #card ![image.png](/assets/image_1742050245176_0.png)


redguardtoo/keybindings_json

[[@如何提高编程速度:Emacs高手教授轻松精通所有编辑器和IDE的秘诀]] 中提到的 VS Code 全局快捷键设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Place your key bindings in this file to overwrite the defaults
[
{
"key": "F12",
"command": "workbench.action.togglePanel",
},
{
"key": "Ctrl+]",
"command": "editor.action.goToTypeDefinition"
},
{
"key": "Ctrl+T",
"command": "workbench.action.navigateBack"
},
{
"key": "Ctrl+F12",
"command": "workbench.action.toggleMaximizedPanel"
}
]

repartition 和 coalesce 对比

coalesce

repartition

Spark中repartition和coalesce 相同点 :-> 都是调整分区的方法
Spark中repartition和coalesce 区别 :-> repartition 默认有 shuffle 操作,coalesce 使用 hash paritioner 重新 shuffle 数据
什么情况使用 coalesce 调整分区 :-> filter 之后收缩分区
card-last-score:: 5
card-repeats:: 1
card-next-schedule:: 2022-10-22T02:05:11.083Z
card-last-interval:: 4

  • 为什么 :-> coalesce 不需要 shuffle

spark-submit

spark-submit --queue root.queue_name --executor-cores 2 --num-executors 400

num-executors:多少个 Executor 节点来执行

executor-memory

executor-cores:executor CPU 核心数

  • core 同一时间执行一个 task

  • 同一个 executor 中的 core 共享 executor-memory

    • 如果任务占用内存比较多,调小 cores 数,可以使用更多内存

driver-memory

  • collect 算子将 RDD 拉取到 Driver 处理需要避免 OOM

spark.yarn.executor.memoryOverhead executor 额外预留的内存

spark.default.parallelism

  • 每个 stage 默认 task 数量 500-1000

  • 设置该参数为num-executors * executor-cores的2~3倍较为合适

spark.dynamicAllocation.minExecutors 以及 spark.dynamicAllocation.maxExecutors

  • 运行时动态分配 core 数

spark.driver.maxResultSize设置 Executor 端发回数据量

降低 spark.memory.fraction


sed

删除包含特定字符串的行 sed '/abc/d;/efg/d' a.txt > a.log

删除前几行 sed -i '1,10d' filename

删除最后几行 sed -i '$d' fileName

在每行的头添加字符,比如"HEAD" sed 's/^/HEAD&/g' test.file

在每行的行尾添加字符,比如“TAIL” sed 's/$/&TAIL/g' test.file

sed -n

  • 安靜 (silent) 模式

[n1[,n2]]function

function

  • p 打印

mac sed -i "tmp" "命令" file.txt

  • 需要指定一个备份字符串,原文件会保存成 file.txttmp

  • 如果不需要备份,直接给个空字符串

其他分隔符

  • @

  • |

  • !

  • 反引号


self-attention

不同部分作用

  • query :-> 与 key 计算相似度,为自身的输出 i 建立权重
  • key :-> 与 query 计算相似度,建立第 j 个向量 j 的权重
  • value :-> 作为加权总和的一部分,计算每个输出向量
    对自身 $$X$$ 线性变化得到 $$Q=W_QX, K=W_KX, V=W_VX$$,用来捕获同一个句子中单词之间的一些句法特征或者语义特征。

注意力计算

  • hi=att((K,V),qi)=j=1Nαijvj=j=1Nsoftmax(s(ki,qi))vj\begin{aligned} \mathbf{h}_{i} &=\operatorname{att}\left((K, V), \mathbf{q}_{i}\right) \\ &=\sum_{j=1}^{N} \alpha_{i j} \mathbf{v}_{j} \\ &=\sum_{j=1}^{N} \operatorname{softmax}\left(s\left(\mathbf{k}_{i}, \mathbf{q}_{i}\right)\right) \mathbf{v}_{j} \end{aligned}

打分函数 $${H=V softmax(\frac{K^TQ}{\sqrt{d_3}})}$$

过程

为什么 self-attention 先对 embedding 进行 dense 层映射,然后再进行 attention 计算?

  • dense 层 #card

    • W 为自注意力层提供一些可控制的参数,允许输入的向量适合 QKV 的功能。

    • qkv 的大小,实现降维。

    • 多头机制作用 :-> 每一个头对应的 wq、wk、wv 矩阵都不同,对模型的本身特征抽取的多样性具有帮助。

  • 为什么不能直接做 attention 计算?原始 embedding 空间点击建模 :-> 语义关系

    • 点积建模语义的问题 :-> 默认假设语义相近的注意力更高, VVV 中自己对自己的注意力权重永远最高

      • 结果 :-> 其他位置上有关系的注意力相关性就会被弱化。
  • 进行变换后的点积含义

    • 新空间点积 :-> 表示注意力高,但不代表语义相似度高。
      • 好处 :-> 能在新空间里更加专注于注意力的学习。
  • 一个词在做 query、key、value 时,直觉 :-> 有不同的表示

为什么 self-attention 中的词向量要乘以 QKV 参数矩阵?

  • self-attention 核心利用 文本中的其它词 来增强 目标词的语义表示
  • 不乘以 QKV 矩阵 :-> qkv 完全一样,qi 和 ki 的点积比重会最大,无法有效利用上下文信息来增强当前词的语义表示。
  • QKV 参数矩阵使得多头作用 :-> 类似于 CNN 中的多核,使捕捉更丰富的特征/信息成为可能
    现在看来self-attention 是增强了模型表示能力,还是有了更好的对特征的权重加权? - 知乎 :-> 增强模型表达能力
  • 增强模型表达能力 :-> 加权对象是 token,融合不同的 token 来构造当前 token 在当前上下文情况下的表示
  • 如果是对特征进行加权, :-> 初始化的 word embedding应该直接用那些预训练好的,实际上预训练的词向量并不会提高模型收敛后的效果。

Ref


switch 折腾

数据备份

  • atmosphere 大气层系统相关文件

  • emuMMC 虚拟系统内存中数据

  • Nintendo 虚拟系统 SD 卡中数据

游戏安装

使用 mac 系统更换 SD 内存卡

游戏格式

  • NSP

    • Nintendo Submission Package

    • eshop 中的数字版

    • 压缩格式为 NSZ

  • XCI

    • NX Card Image

    • 卡带 dump 文件镜像

    • 压缩格式为 XCZ

报错

存档管理

相关资源


teacher forcing

seq2seq使用teacher forcing有一个问题,就是模型训练和预测行为的不一致会导致模型的泛化性能下降

[[Transformer]] 训练阶段使用这种方式,旨在提升序列模型训练稳定性、加速模型收敛。

  • 一次性输入全部目标序列,可以并行的方式一次性输出完整的目标序列,提高训练效率

stacking

将一系列模型的输出结果作为新特征输入到其他模型,从而实现模型的层叠。

  • 数据不能泄漏,否则会出现过拟合。

方法

  • 训练集数据分成 k 份,每次使用 k-1 份数据训练 k 个模型

  • 利用上面的模型预测没有训练的数据,预测结果做为一个新的特征A

  • 用label+新的特征训练模型训练一个新的模型

  • 测试集先过上面的 k 个模型得到预测结果,结果求平均做为特征A,在经过最后的模型得到结果

[[Ref]]


yihong0618

yihong0618 (@yihong06181) / Twitter 个人跑步数据可视化

yihong0618/gitblog: People Die, but Long Live GitHub 使用 [[Github Issues]] 写博客


一只小胖子

高效时间&知识管理 - 知乎

一只小胖子-知乎的个人空间_哔哩哔哩_bilibili

一只小胖子@知乎的分享 - 幕布 (mubu.com)

感受:思考、实践、总结、迭代

文章

+ 架构图太复杂了……


三国杀国战

武将统计

  • 国标(60 将)

  • 君临天下 (32 + 4 将)

  • 应变篇

  • 不臣篇 (10 + 10 将)

  • 纵横捭阖(8 将)

    • 三国杀十周年服务器国战扩展

实体卡牌

  • 三国杀国战应变篇

    • 116 张武将
  • 三国杀国战群雄割据

    • 117

    • 完整不臣篇,无四君主,势备篇权包不齐

  • 三国杀国战十年经典 162将


中心极限定理

假设 {Xn}\left\{X_n\right\} 为独立同分布的随机变量序列,并具有相同的期望 μ\mu 和方差为 σ2\sigma^2 ,则 {Xn}\left\{X_n\right\} 服从中心极限定理, 且 ZnZ_n 为随机序列

& Z_n=\frac{Y_n-E\left(Y_n\right)}{\sqrt{D\left(Y_n\right)}}=\frac{Y_n-n \mu}{\sqrt{n} \sigma} \rightarrow N(0,1) \
&
\end{aligned}

中心极限定理就是一般在同分布的情况下,抽样样本值的规范和在总体数量趋于无穷时的极限分布近似于正态分布。 中心极限定理就是一般在同分布的情况下,抽样样本值的规范和在总体数量趋于无穷时的极限分布近似于正态分布。


二项分布方差推导

var(m)=E[m2]E2[m]=m=0Nm2N!(Nm)!m!μm(1μ)NmN2μ2=m=1Nm2μN!(Nm)!m!μm1(1μ)NmN2μ2=m=1NmμN!(Nm)!(m1)!μm1(1μ)NmN2μ2\begin{aligned} \operatorname{var}(m) & =\mathrm{E}\left[m^2\right]-\mathrm{E}^2[m] \\ & =\sum_{m=0}^N \frac{m^2 N !}{(N-m) ! m !} \mu^m(1-\mu)^{N-m}-N^2 \mu^2 \\ & =\sum_{m=1}^N \frac{m^2 \mu N !}{(N-m) ! m !} \mu^{m-1}(1-\mu)^{N-m}-N^2 \mu^2 \\ & =\sum_{m=1}^N \frac{m \mu N !}{(N-m) !(m-1) !} \mu^{m-1}(1-\mu)^{N-m}-N^2 \mu^2\end{aligned}

u=m1,T=N1u=m-1, T=N-1 代入上面

  • var(m)=u=0T(u+1)μ(T+1)!(Tu)!u!μu(1μ)TuN2μ2=(T+1)μu=0TuT!(Tu)!u!μu(1μ)Tu+(T+1)μu=0TT!(Tu)!u!μu(1μ)TuN2μ2=(T+1)Tμ2+(T+1)μN2μ2=N(N1)μ2+NμN2μ2=NμNμ2=Nμ(1μ)\begin{aligned} \operatorname{var}(m) & =\sum_{u=0}^T \frac{(u+1) \mu(T+1) !}{(T-u) ! u !} \mu^u(1-\mu)^{T-u}-N^2 \mu^2 \\ & =(T+1) \mu \sum_{u=0}^T u \frac{T !}{(T-u) ! u !} \mu^u(1-\mu)^{T-u}+(T+1) \mu \sum_{u=0}^T \frac{T !}{(T-u) ! u !} \mu^u(1-\mu)^{T-u}-N^2 \mu^2 \\ & =(T+1) T \mu^2+(T+1) \mu-N^2 \mu^2 \\ & =N(N-1) \mu^2+N \mu-N^2 \mu^2 \\ & =N \mu-N \mu^2 \\ & =N \mu(1-\mu)\end{aligned}

了不起的杰弗里斯

AOE:1费旋风斩打1,2费背叛,3费闪电风暴打3,4费暗影烈焰打3、暗言术毁,5费混乱新星打4、乱斗,6费暴风雪打2,7费呼啦打5,8费扭曲虚空

单解:0费背刺,1费惩击,2费痛灭,3费致命射击,4费呱、暗影狂乱,5费虹吸,6费白富美

直伤:0费月火术打1,1费灵魂之火打4,3费熔岩爆裂打5,4费火球打6,7费血吼打7,8费心中的恶魔打8,10费炎爆打10

斩杀:0费怒火中烧,2费风怒,3费咆哮,5费嗜血

苟活:2费奶8,3费冰环,8费弗丁,9费大王、红龙15血

站场:3费大范,4费暮光龙,6费狮子,8费弗丁

功能牌:1费鱼人杀手蟹,2费软泥,5费哈里森,3费成长,4费架墙,0费沉默,1费冰霜震击2费寒冰箭冻脸,5费无面

姐夫+佐拉5费,姐夫+林彻7费,姐夫+佐拉+铜须8费,姐夫+佐拉+林彻10费,姐夫+林彻+铜须10费

[[Ref]]


从 hexo 迁移到 zola

hexo 基于 nodejs 实现,有大量的依赖,每次整理

博客系统演变之路

  • hexo+next、even Typecho Cho

  • wordpress

  • jekll

  • tiddlywiki

  • hugo

需要修改

[[nunjucks]] 模板引擎,文件扩展名是 njk

Ref


佣兵任务总结

来源:https://bbs.nga.cn/read.php?&tid=29315359

任务1~18具体情况如下:

  • 任务13:使用13技能造成XX效果(使用技能则必须在队中,下同)
    任务4:造成140点伤害(不必在队中)
    任务5:30级后1个悬赏(必须在队中)
    任务6:打败40个随从(不必在队中)
    任务7:打败2个英雄难度首领(不必在队中)
    任务8:拿到2~4个赐福(不必在队中)
    任务911:使用13技能造成XX效果。
    任务12~13:4个英雄难度悬赏(必须在队中)
    任务14:使用某技能造成XX效果。
    任务15:完成6个悬赏(必须在队中)
    任务16:对XX(如护卫)造成900点伤害(不必在队中)
    任务17:使用包含此佣兵的队伍造成900点XX伤害
    任务18:对英雄难度首领造成450点伤害(不必在队中、只算首领喽喽不算)

倾向性评分

倾向性评分是一个概率值(介于0和1之间),表示#card

  • 在给定一组观测到的协变量(covariates,如年龄、性别、病史等)的情况下,某个个体被分配到处理组(而非对照组)的条件概率。

  • 当前输入特征下用户被分配到实验组的概率

    • e(x)=Pr[T=1X=x]e(x)=\operatorname{Pr}[T=1 \mid X=x]

对于倾向性得分相同的一群用户,treatment 和特征是独立的,treatment 和潜在结果也是独立。


偏导数

多变量函数中,偏导数就是关于其中一个变量的导数而保持其它变量恒定不变。


傅里叶变换

任意一个函数表示成诺干个正交函数的线性组合。

时域 空间域

  • x 轴是时间

  • 例子

    • 信号

      • 一个物理量在时间上的变换
    • 三角函数图

频域 变换域

  • x 轴是频率

  • y 轴是对应频率下的增幅

时域到频域变换 #card

F(ω)=+f(t)eiωt dtF(\omega)=\int_{-\infty}^{+\infty} f(t) \cdot e^{-i \omega t} \mathrm{~d} t

  • F(f)=+f(t)ei2πft dtF(f)=\int_{-\infty}^{+\infty} f(t) \cdot e^{-i 2 \pi f t} \mathrm{~d} t

欧拉公式

使用正弦曲线做为基,会考虑整个坐标轴情况

  • g 函数是指数函数 [[拉普拉斯变换]]

  • 高斯分布做 g 函数的变换 [[Gabor Transform]]

+ s 控制窗口位置

+ $\vec{d}_{n, s}=g(t-s) \cdot e^{i n t}$

ga(ts)=12πae(ts)24a×2g_a(t-s)=\frac{1}{2 \sqrt{\pi a}} e^{-\frac{(t-s)^2}{4 a}} \times 2

  • 窗口大小不固定 [[小波变换]]


充分统计量

对于方差和期望来说,知道方差可以求出期望,期望是方差的充分统计量,反之毅然。

统计量 s 是样本的函数值(比如均值、方差)

充分统计指包含分布所需的全部信息的统计量

  • 有充分统计量后,就不需要存储样本

[:span]
ls-type:: annotation
hl-page:: 59
hl-color:: yellow


共轭先验

[[贝叶斯公式]] p(wX)=p(Xw)p(w)p(X)p(\boldsymbol{w} \mid \boldsymbol{X})=\frac{p(\boldsymbol{X} \mid \boldsymbol{w}) p(\boldsymbol{w})}{p(\boldsymbol{X})}

  • 分母 px 与 w 无关

  • p(wX)p(Xw)p(w)p(\boldsymbol{w} \mid \boldsymbol{X}) \propto p(\boldsymbol{X} \mid \boldsymbol{w}) p(\boldsymbol{w})

  • 后验相关于似然乘先验

[[共轭]]: 如果先验和似然相乘得到的后验与先验有相同的函数形式,我们就说该先验是似然的共轭先验,也说后验分布和先验分布是共轭分布。
ls-type:: annotation
hl-page:: 61
hl-color:: yellow

  • 如何判断?

    • 是否共轭看的是后验是否和先验有相同的函数形式。
      ls-type:: annotation
      hl-page:: 61
      hl-color:: yellow

      • 不是先验和似然的函数形式是否相同,也不是似然和后验函数形式是否相同。

      • 先验和后验都是对 w\boldsymbol{w} 建模,似然是基于w\boldsymbol{w} 对 X 建模。

        • 先验与似然的的研究对象不同,不能强求函数形式相同。

        • 先验和后验是对同一对象的两个不同模型,可以要求有相同的函数形式。

    • 特殊情况: 在某些情况下,存在先验、后验、似然三者函数形式均相同的情况。
      ls-type:: annotation
      hl-page:: 61
      hl-color:: green

      • x服从高斯分布时似然是高斯的,其均值的共轭先验也是高斯的,由共轭先验得到的后验也是高斯的,此时三者的函数形式都相同。
        ls-type:: annotation
        hl-page:: 61
        hl-color:: green
  • 似然和先验共轭,后验分布和先验分布是共轭分布

    • 例子:

      • 我们说“伯努利分布的共轭先验是Beta 分布”
        ls-type:: annotation
        hl-page:: 62
        hl-color:: green

        • 伯努利分布是随机变量 x 服从的分布,对应似然,相当于似然和先验共轭
      • 我们一般不说“伯努利分布参数µ的后验分布和Beta共轭”
        ls-type:: annotation
        hl-page:: 62
        hl-color:: green

        • 后验与先验共轭
      • 我们倒是可以说“由Beta分布导致的伯努利分布参数µ的后验分布和Beta先验是共轭分布”
        ls-type:: annotation
        hl-page:: 62
        hl-color:: green

共轭先验是一种特殊的先验

  • 局限性

    • 理论上,我们应该从问题的实际出发,为参数引入最合理的先验,也就是我们应该从建模的合理性而不是从计算的方便性和可解释性出发选择先验。
      ls-type:: annotation
      hl-page:: 62
      hl-color:: yellow
  • 优点

    • ls-type:: annotation
      hl-page:: 62
      hl-color:: yellow

      • 先验和后验函数形式相同
    • ls-type:: annotation
      hl-page:: 62
      hl-color:: yellow


写Leetcode每日一题

如何写题解?

  • 模板,打上相关的标签 Problems/2025

  • 记录怎么想这题的,错误的解法,以及正确的解法。

[[2025/04]]


分组循环

使用场景

  • 数组会被分割成若干段,且每一段判断/处理逻辑是一样的。

好处

  • 无序判空

  • 无需在循环结束后再补上最后一段区间的逻辑

1
2
3
4
5
6
7
i, n = 0, len(nums)
while i < n:
start = i
while i < n and ...:
i += 1
# 从 start 到 i-1 是一段
# 下一段从 i 开始,无需 i+=1

匹配法

基本形式 #card

  • 匹配法就是找出对应组的相似对象并将其事实结果作为反事实结果估计

  • 该方法运用能够影响结果的协变量,从对照组中选出和干预组相似的样本进行匹配,并对两个组进行比较。

匹配法成立的条件是影响结果的所有协变量均 可观测
存在多个协变量时,也可以将它们整合成一个得分进行 :-> 匹配 [[倾向性评分匹配]]
倾向得分匹配法成立必须满足两个前提条件。#card

  • 第一个前提条件是,所有会影响结果的协变量均为可转化成数值的数据。

  • 第二个前提条件是所有协变量都必须用来计算倾向得分

例子:对于干预组的一件打9折的连衣裙A,可以在控制组的没打折的连衣裙中找出具有相似款式,风格,材质等属性的连衣裙B,将B的销量作为A的 反事实结果
匹配可以形式化如下,其中 Y^i\hat{Y}_i 为单元 ii 的预估结果, YiY_i 为单元 ii 的事实结果, J(i)J(i) 为单元 ii 的匹配邻居。这里包含两个问题:1)如何定义相似?2)如何挑选邻居?#card
image.png

距离度量

  • 原始空间:#card

    • 我们可以基于原始的背景变量计算欧氏距离,马氏距离等常见的距离。当背景变量较少时也可以进行完全匹配,例如只有性别,年龄,城市,学历等完全相同时才匹配为邻居。
  • 变换空间:#card

    • 在原始空间不一定能够找到合适的距离度量,因此我们可以将背景变量变换到其他空间,在该空间用常见的距离度量也有较好的效果,可以形式化为 D(xi,xj)=f(xi)f(xj)2D(x_i,x_j)=\Vert f(x_i)-f(x_j)\Vert_2 。这里重点在于变换函数 ff 如何设计。
  • 倾向性分:#card

    • f(x)=e(x)f(x) = e(x)
  • 线性倾向性分:#card

    • f(x)=logits(ei)f(x) = logits(e_i)
  • 基于预测分数:#card

    • 有点像 Domain Adaption 中对齐标签信息,使得背景变量相似的样本映射到变换空间后具有相似的事实结果,代表性方法是 HSIC-NNM
  • 基于随机映射:#card

    • 高维空间变量随机映射到低维空间后仍然可以保持原来的相似信息,代表方法是 RNNM
  • 混合方法:首先基于所有背景变量用倾向性分做一遍粗筛,然后对于关键背景变量用以下度量做一遍精筛。#card
    image.png

邻居选择

  • 最近邻匹配:#card

    • 顾名思义取距离最近的邻居,是否有放回,匹配的数量等会影响最终的效果。当采取无放回匹配时,匹配的顺序也会影响效果。
  • 分层匹配:#card

    • 将距离划分成不同区间分别匹配增加邻居的多样性。
  • 完全匹配:#card

    • 匹配对应组所有样本,但是会有一个加权权重。

变量选择:#card

  • 在计算距离时一般会使用所有背景变量,但是正如 D2VD 中提到的问题,背景变量中还包含其他变量,例如调整变量,工具变量等,使用这些变量会带来负向影响。

写卡片的原则与建议

做笔记,做知识管理是为了什么? [[母题]]

  • light 做笔记,就是为更好地做经营决策和投资决策

  • shaonan 做笔记,除了用来写这本书,也为他的付费邮件组「产品沉思录」积累素材;

  • 自己 做笔记是为了学习算法知识,解决现实中的问题。

原则

  • 已我为主,增援未来

五条建议

  • 记录 [[反常识卡]]

    • [[多元思维模型]] 不是用来证明机会有效,而是用来证伪机会不值得投资。

    • 如何寻找反常识?

      • 反常识的观点或事实

      • 负面的观点

      • 改变解读过去经验的视角

      • 复杂东西简化的视角

      • 意料之外但情理之中的视角

    • [[反直觉]]笔记

      • 记录反直觉的信息可以帮助我们打破思维惯性,从另一个视角来看待惯常的事物,得到完全不同的启发。

      • 如何捕捉反直觉的信息

    • #idea 之前记笔记时,考虑过能重新想到的东西不需要记录,去记想不到的点。

      • 反自己的常识

      • 反大家的常识

  • 不追求形式,慎用模板

    • 目的决定形式

      • 自用的笔记可以按自己喜欢的方式组织,公开的笔记站在读者的角度整理。

      • 而如果缺少了这个目的,就会很容易在读书的时候把「写读书笔记」这种形式当做一个目的。在记录时,你就总会去想知道别人是如何做笔记的,有没有更好的方法和模板,然后陷入到对形式选择的无尽比较和纠结之中。

    • 慎用他人模板

      • 理解模板背后的思路,然后按自己的习惯进行改造
  • 用自己的话来写

    • 需要经历的过程:复制、转换、混合

    • 如何在记录时把复制的东西变成自己的话语

      • 用自己的案例替换

        • 比如在对于芒格所说的「如果知道会死在哪里,就不要去哪里」这句话,就可以举出设计 flomo 时多台服务器备份数据避免丢失的案例,以及在读李光耀自传时,他反复强调新加坡最重要的是解决海水净化问题,避免被其他国家掣肘。
    • 证伪

      • [[西蒙学习法]] 仅存在与中文互联网
  • 精炼知识点

    • 使用思维导图做读书笔记缺点在于复述书本的脉络,记录作者的思想,没有和自己的只是进行结合。

    • 通过精炼知识点,有选择记录和自己中长期目标相关的知识。

  • 质量胜过数量

    • 换个角度来看,以前文提到的德国社会学家尼克拉斯 · 卢曼来说,其一生出版了五十多本著作,积累了 9 万张卡片。但是如果按照 30 年的研究生涯来看,每天记录也不过只有 8 张卡片,而且都是如下面这样寥寥数语。所以作为普通人,我们恐怕真的没有必要追求那么多的数量。

如何才能持续不断


十三邀S5E01:许知远对话罗翔

为权利而斗争

法律人物:

  • 马丁路德金

  • 甘地

  • 林肯

  • 沈家本

    • 故居 北京宣武门外

    • 历代刑法考

    • 刑法是威吓的工具

      • 民不畏死,奈何以死惧之

      • 极端残酷性实现罪行平衡

网络暴力

  • 朋友对罗翔说:别人对你的表扬名不副实,你就很开心,对你的批评名不副实,你就不高兴了,你这不是典型的双标吗?

理念上的乌托邦是有意义的,但是现实中的乌托邦是不可能的。我们画不出那一个完美的圆,我们无法追求到绝对的美,但是你不能推导出,这个世界没有美,这个世界一切都没有意义,那人的存在是没有意义的,人类追求美的是没有意义的。

逐字稿,不紧张

湖南话 昨天、今天和明天

[[Plato]] 学习是一种回忆

  • 人类的原初设置

泛道德倾向:

  • 道德是自律,不是他律

    • 道德是要求自己的,不是要求他人的。
  • 道德完美主义

  • 积极道德主义

    • 是以道德作为惩罚正当化的一种依据,只要一种行为违背了道德,那我们就要千方百计地对他进行惩罚。

    • 对违反道德的行为,进行惩罚

    • 中国传统

  • 消极道德主义

    • 是把道德作为一种出罪的依据,作为一种正当化的依据。

    • 如果在道德上是值得谴责的,那它不一定是犯罪,

    • 但如果一种行为在道德生活是被鼓励的一种行为,把它就不应该受到惩罚。

法律强调程序正义

  • 人们往往有朴素的正义之心、道德之心,但这种正义之心、道德之心又是有高度压迫性的。

  • 罪行法定

  • 因为司法是一定会存在错误的一种过程。司法的错误如何被人所接受,就是它是强调程序的。

    • 程序中可以达到可见的正义,有瑕疵的正义
  • 网络进行道德审判

    • 民众很多时候是希望撇开程序,去寻求他心目中的一些正义,而这种正义会导致一种非正义。

    • 往往是善良的愿望把人们带入地狱。

  • [[侠客行]]

大宪章:公权和私权分开

法律高度技术化

人承认自己是有限的

  • 人要接受自己的有限性,人承认自己是有限的,于是承认你的逻辑是有限的,承认你的理性是有限的,承认你的阅读是有限的,承认你整个人就是在偏见之中,你这一生就是在走出偏见。

    • 古人说的行千里路,读万卷书。因为你行了千里路,就一定会从地方性偏见走出来,了解了各地各异的风俗人情,就不会觉得只有自己老家或者自己所处的地方就是最好的。

    • 读万卷书就会走出时代偏见,因为你在读书的过程中你会跟古人,跟过去的时代,跟其他的时代进行交流,那就可能走出时代性的偏见。

  • 一生是走出偏见

人最大的痛苦是 :-> 无法跨越知道和做到的鸿沟

  • 你自己所教的,你做不到。你是在骗别人,你也在自我欺骗。

  • 我思故我在:幻想

  • 我始终告诫我自己,人能真正影响的人其实很少很少,很多人所谓的被你影响只是片刻的感动,最后还是投入到自己以前的生活。人片刻地感动,不可能持久地感动。

  • ^你为自己想到的所感动^

我不能够弃演
人被你片刻地感动

  • 许:但现在片刻的感动已经成为这个时代重要的一种方式。

  • 罗:这很多时候是一种自我欺骗,你在欺骗自己,你也在欺骗别人,你也让别人陷入了一种自我欺骗。

  • 技术主义背后的价值

做城邦中的[[牛虻]]

  • 知识分子的一个重要的特点,可能还是像苏格拉底所说的,做城邦中的牛氓。

  • 作为我们法律人,我们是双向牛氓。

    • 一方面,我们是城邦的牛氓,我们要对权力进行警惕;

    • 一方面,我们是民众身上的牛氓,我们要提醒他们,激情是有界限的,激情也是要在法治的界限之中。

民众对公平和正义的期待在视频中找到回响

[[Socrates]]的狂喜是真诚对待[[德尔斐神谕]]

  • [[认识你自己]]

  • 凡事勿过度

  • 妄立誓则祸近

我始终相信我们不可能追求到绝对善,但是我们也不能因为绝对善追求不到而退向相对主义。

大部分人想的不是金箍棒,也是定海神针。大部分人想的是怎么混进蟠桃会吃个桃子。


双塔模型

[[DSSM]]

user

离线建图 + [[Approximate Nearest Neighbor Search]]

  • 离线计算 item 的 embedding

[[@双塔模型最后一层为什么都进行L2 Norm? ;/]]
双塔训练方法 #card #depth-1

  • Pointwise:独立看待每个正样本、负样本,做简单的 二元分类 #card
    image.png

  • [[Pairwise 训练]] 每次取一个正样本、一个负样本

  • [[Listwise 训练]] 每次取一个正样本、多个负样本

Ref


协方差

衡量^两个随机变量^各个维度偏离其均值的程度

  • 协方差值含义

    • 正值说明两个变量正相关

    • 负值说明两个变量负相关

    • 零值说明两个变量相互独立

  • 方差是协方差的一种特殊情况

  • 两个随机变量都是多维的

协方差矩阵:

  • ij 是第 i 个与第 j 个随机变量的协方差

  • ij=cov(Xi,Xj)=E[(Xiμi)(Xjμj)T]\sum _{ij}=cov (X_i,X_j)=E[(X_i-\mu_i)(X_j - \mu_j)^T]

  • 如果变量是 d 维,那么协方差 $$\sum = d * d$$ 维

[[Ref]]


区间 DP

dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+cost[i][j])dp[i][j]=max(dp[i][j], dp[i][k]+dp[k+1][j]+cost[i][j])

从小到大枚举区间的长度

确定 i,j,枚举中间的点,由于先枚举的长度,i和j之间更小的区间都已经被计算过。


可解释性

可解释模型

  • 线性回归、逻辑回归、决策树

特征重要性

  • Permutation Importance

    • 要某个研究特征的重要性,将特征对应的数据打乱排序,观察 metric 或 loss 变化。如果变化不大,说明该特征重要性低
  • [[@A Unified Approach to Interpreting Model Predictions]] 通过 SHAP 计算每一个样本中的特征影响力

  • [[@“Why Should I Trust You?”: Explaining the Predictions of Any Classifier]] LIME 与模型无关的局部可解释。假设非线性模型的局部是近似线性的,用线性模型的权重大小反应对应特征的重要程度。

image.png

  • XGBoost 特征重要性指标 get_score 方法

    • 特征在所有树中做为划分属性的次数

+ 特征作为划分属性时 loss 平均的降低量

+ 特征作为划分属性时对样本的覆盖度

单特征分析

  • Partial Dependence Plots 部分依赖图,通过改变部分变量的值而固定其余变量的方式研究部分变量与预测目标的关系。

    • 开源工具包 pdpbox,同时改变多个样本的部分变量为相同值,然后求预测结果的平均值。

      • x 是特征取值范围,y 轴代表预测结果。随着特征取值变大,y 逐渐增大然后收敛。

多特征分析

  • pdpbox 工具

    • 颜色越浅这个概率越大

树模型可视化

  • 通过 xgb.plot_tree 画出树的分裂过程

  • 观察项

    • 树的路径以及对应叶子节点权值是否符合业务常识

    • badcase 以及树结构有没有特点

    • 不同特征在树中分布情况

    • 那些特征经常是父子节点关系?那些特征经常出现同一个路径上?

Embedding 可视化

  • [[t-SNE]] 降维聚类展示

基于反向传播可视化 CNN 网络

  • CAM

  • Grad-CAM

推荐系统

  • [[@打造工业级推荐系统(十):如何构建可解释的推荐系统]]

  • 给定 item embedding 按相似度召回相似物品,观察 item 相关性

  • 不同召回策略的结果做对比,观察相关性、新颖性、多样性。

Ref


吃饭的时候,给家人聊聊星舰吧

[[第一性原理]] 生产和经营中遇到的一切障碍或者说规范,都必须刨根问底,找到终极原因,一直到最基本的数学或物理规则才能停下来,考察合理性。

  • 比如说,生产线上某个工序拖了后腿,马斯克的第一反应是要求机器加速运转。如果工程师说安全规范不允许,马斯克也不会生气,但要求工程师必须拿出制定安全规范的依据,然后追问依据的依据。如果某个层次的依据无法说服马斯克,或者最终层面上不能用基本科学原则解释,马斯克就会要求冒险突破规范试试。赌赢了,效率大大提升;而赌输了,毁掉的机器正好拆开做研究,看看怎样改造能突破规范。现在上天的不锈钢廉价火箭就是这样一次次试探出来的。

因果关系阶梯

PCH Pearl’s Causal Hierarchy

image.png

因果关系者掌握三种不同层级的认知能力:观察能力(seeing)、行动能力(doing)和想象能力(imagining)。

第一层对应观察到的世界,第二层对应的是一个可被观察的美好新世界,第三层对应无法被观察到的世界。

  • 第一层级是观察能力,具体而言是指发现环境中的规律的能力。在认知革命发生之前,这种能力为许多动物和早期人类所共有。

    • 关联:统计学,当前深度学习,依赖数据,缺乏灵活性和适应性
  • 第二层级是行动能力,涉及预测对环境进行刻意改变后的结果,并根据预测结果选择行为方案以催生出自己期待的结果。

    • 干预比关联更高级,因为它不仅涉及被动观察,还涉及主动改变现状。

    • 干预:参考过去的数据,不能解决当前的行为。比如之前的涨价是由于其他原因导致的。AB实验

  • 第三层想象能力

    • 反事实,对事件干预后进行反思


因果推断

[[因果推断方法]]

从结果估计原因 $$P(Y|do(X))$$

因果推断 ( Causal Inference ) 作为新兴的人工智能技术方向,旨在突破传统数据分析和机器学习方法的瓶颈,建模大规模数据集中的因果关系,为干预手段的设计提供指导,为构建下一代面向用户增长的全域分发系统提供理论基石。

正确区分因果关系和相关关系的方法论

核心课题

  • 从众多观测到/未观测到的变量中找出致因 ( causes )

  • 预估某个行为/因素的影响力/效益 ( causal effect )

核心是寻找反事实 ( counterfactual ) 镜像

随机对照实验的局限性

[[因果关系阶梯]]:关联、干预、反事实

因果建模方式

  • 有随机控制实验 RCT Randomized Controlled Trial

    • 根据控制变量去随机分组

    • 耗时,非道德

  • 观测研究 Observational Study

[[匹配法]]

[[UPlift Model]]

  • [[Uplift Model 评估]]

  • [[Uplift Curve]]

  • [[Meta-Learner]]

    • [[S-Learner]] one-model 的差分响应模型

    • [[T-Learner]] two-model 差分响应模型

    • [[X-Learner]] 基于 T-Learner的反事实推断模型

    • [[R-Learner]] 通过 Robinson’s transfomation 定义一个损失函数,然后通过最小化损失函数的方法达到对增量进行建模的目的。

[[Ref]]


吴恩达关于如何阅读论文建议

Stanford CS230: Deep Learning | Autumn 2018 | Lecture 8 - Career Advice / Reading Research Papers - YouTube

主题阅读

  • 收集资料

  • 列出一个 list ,标注阅读进度。挑选有价值的论文阅读。

  • 5-20 初步了解

  • 50-100 很好理解前沿工作

如何阅读论文

多遍阅读策略

  • 第一遍 :<-> 标题,摘要,图片

  • 第二遍 :<-> 简介、结论、图片相关材料

  • 第三遍 :<-> 进入论文主体部分,但是可以跳过数学,明白每个参数的含义。

  • 第四遍 :<-> 阅读整篇文章,跳过没意义的部分(内容过时,没有火起来过)。
    阅读时思考的问题

    1. 作者试图解决什么问题?
    1. 研究方法的关键是什么?(最具有开创性)
    1. 哪些东西可以为你所用?
    1. 有哪些参考文献可以继续跟进?

读论文的延续性

  • 在接下来一年保证每周读两篇文章比在一个月集中阅读50篇就更加行之有效。

How You Should Read Research Papers According To Andrew Ng (Stanford Deep Learning Lectures) | by Richmond Alake | Jul, 2020 | Towards Data Science

  • In your first pass, start with reading the following sections within the paper: title, abstract and figures.

  • The second pass entails you reading the following sections: introduction, conclusion, another pass through figures and scan through the rest of the content.

  • The third pass of the paper involves reading the whole sections within the paper but skipping any complicated maths or technique formulations that might be alien to you. During this pass, you can also skip any terms and terminologies that you do not understand or aren’t familiar.

  • Those conducting in-depth research into a domain can take a few more passes. These additional passes will mainly be focused on an understanding of the maths, techniques and unknown terminologies presented within the paper.


因果效应预估

树模型

  • 改造传统树模型的分裂规则,每次分裂最大化干预组与对照组之间的差异 Dgain =Dafter split (YC,YT)Dbefore split (YC,YT)D_{\text {gain }}=D_{\text {after split }}\left(Y_C, Y_T\right)-D_{\text {before split }}\left(Y_C, Y_T\right),使得因果效应近似的样本尽可能落在同一个节点,从而可以实现直接预测样本的干预效应。

  • Casual Tree

  • Casual Forest

因果元学习 [[Meta-Learner]]

  • Double/debiased Machine Learning Method

    • [[倾向性模型]] Propensity Model:预测干预变量

    • [[响应模型]]:预测目标变量,构造时不适用干预变量

[[Doubly Robust]] 同时使用干预变量与控制变量


均匀分布

[[概率密度函数]]

  • f(x)=1ba,a<x<bf(x)=\frac{1}{b-a}, a<x<b

基于 MSE 的 GBDT 推导

损失函数 MSE $${L(y, F(x))=\frac{1}{2}(y_i - f(x_i))^2}$$

通过调整 $${F(x_1), F(x_2), …, F(x_n)}$$ 最小化 $${J=\sum_i L(y_i, F(x_i))}$$

将视为 $${F(x_1), F(x_2), …, F(x_n)}$$ 数字,$${F(x_i)}$$ 当成是参数,并求导

JF(xi)=iL(yi,F(xi))F(xi)=L(yi,F(xi))F(xi)=F(xi)yi{ \frac{\partial J}{\partial F(x_i)} = \frac{\partial \sum_i L(y_i, F(x_i))}{\partial F(x_i)} = \frac{\partial L(y_i, F(x_i))}{\partial F(x_i)} = F(x_i)-y_i}

残差等于负梯度 $${y_i-F(x_i)=-\frac{\partial J}{\partial F(x_i)}}$$

Ft+1(xi)=Ft(xi)+h(xi)=F(xi)+yiF(xi)=Ft(xi)1JF(xi){F_{t+1}(x_i)=F_t(x_i)+h(x_i)=F(x_i)+y_i-F(x_i)=F_t(x_i)-1\frac{\partial J}{\partial F(x_i)}}

θt=θt1+αL(θt1){\theta ^t = \theta ^{t-1} + \alpha L^\prime(\theta ^{t-1})}


大唐狄公案

湖滨案

  • 三个案件交织在一起

  • 棋局对应后面的密码


如何创建一个类似的网站

从 [[Conan Chou]] 的“透明盒子计划”网站设计时的一些考虑 中获得方法:

    1. 使用 obsidian-html 将 [[Obsidian]] 中 Markdown 笔记转换成 html 格式。
    1. 克隆 clearbox-project/clearbox-project.github.com 到你的仓库中,然后将上一步得到 html 格式文件拷贝到 notes 目录下。
    1. 通过 Github Pages 部署克隆的项目就能得到一个类似的网站。

最后,我的仓库是 ryenxx/ryenxx.github.io

进阶


多项分布

p(xμ)=k=1Kμkxkp(\mathbf{x} \mid \boldsymbol{\mu})=\prod_{k=1}^K \mu_k^{x_k}

  • xkx_k 中一项为 1,其余为 0

期望

  • E[xμ]=xp(xμ)x=(μ1,,μM)T=μ\mathbb{E}[\mathbf{x} \mid \boldsymbol{\mu}]=\sum_{\mathbf{x}} p(\mathbf{x} \mid \boldsymbol{\mu}) \mathbf{x}=\left(\mu_1, \ldots, \mu_M\right)^{\mathrm{T}}=\boldsymbol{\mu}

似然函数

  • p(Dμ)=n=1Nk=1Kμkxnk=k=1Kμk(nxnk)=k=1Kμkmkp(\mathcal{D} \mid \boldsymbol{\mu})=\prod_{n=1}^N \prod_{k=1}^K \mu_k^{x_{n k}}=\prod_{k=1}^K \mu_k^{\left(\sum_n x_{n k}\right)}=\prod_{k=1}^K \mu_k^{m_k}

    • mk=nxnkm_k=\sum_n x_{n k}

极大似然估计

  • 对 p 求对数似然,约束项是 xp(xμ)=k=1Kμk=1\sum_{\mathbf{x}} p(\mathbf{x} \mid \boldsymbol{\mu})=\sum_{k=1}^K \mu_k=1 ,再通过 [[Lagrange Multiplier]] 求解

    • L=k=1Kmklnμk+λ(k=1Kμk1)L=\sum_{k=1}^K m_k \ln \mu_k+\lambda\left(\sum_{k=1}^K \mu_k-1\right)

    • 对 L 求关于 μk\mu_k 的导数,并令其为 0 。得到 μk=mkN\mu_k=\frac{m_k}{N}

      • Lμk=mkμk+λ0=mkμk+λmkλ=μk1λkmk=kμkNλ=1λ=N\begin{aligned} \frac{\partial L}{\partial \mu_k} & =\frac{m_k}{\mu_k}+\lambda \\ 0 & =\frac{m_k}{\mu_k}+\lambda \\ -\frac{m_k}{\lambda} & =\mu_k \\ -\frac{1}{\lambda} \sum_k m_k & =\sum_k \mu_k \\ -\frac{N}{\lambda} & =1 \\ \lambda & =-N\end{aligned}

重复进行 N 次多项分布实验,得到分布

  • Mult(m1,m2,,mKμ,N)=(Nm1m2mK)k=1Kμkmk\operatorname{Mult}\left(m_1, m_2, \ldots, m_K \mid \boldsymbol{\mu}, N\right)=\left(\begin{array}{c}N \\ m_1 m_2 \ldots m_K\end{array}\right) \prod_{k=1}^K \mu_k^{m_k}

    • (Nm1m2mK)=N!m1!m2!mK!\left(\begin{array}{c}N \\ m_1 m_2 \ldots m_K\end{array}\right)=\frac{N !}{m_{1} ! m_{2} ! \ldots m_{K} !}.

    • k=1Kmk=N\sum_{k=1}^K m_k=N


如何管理自己的时间资产 - 面向信仰编程

制定目标

  • 短期 1~2、中期 3~5、长期 5+

  • 制定 [[OKR]]

    • 年度、季度

    • Objective 1:提高工程能力和技术影响力

      • KR1:完成 6 篇自己满意的高质量技术博客

      • KR2:博客的月平均访问量需要达到 100,000

      • KR3:深入研究 3 种分布式协调服务的实现原理

针对 OKR:拆分任务以及预估时间 [[Trello]]

  • 每周有多少空闲时间可以使用

  • [[Scrum]]

    • 在平时一旦想到对实现目标有帮助的任务就可以加入 TBD 待办事项;

    • 一般选择两周作为一个 Sprint,Sprint 就是一个迭代周期,我们需要一次划分两周 54h 的任务;

    • 周六或者周日是一个比较合理的启动时间;

    • 每个 Sprint 启动时,按照优先级对 TBD 中的任务进行排序;

    • 按照优先级依次对任务进行拆分并预估完成的时间;

    • 将 54h 的任务加入 TODO 列表并启动这次 Sprint;

    • 执行 Sprint 的过程中发现任务预估时间与期望值过大应该及时调整计划,保证高优任务;

    • 执行任务时每天都应该更新 TODO 和 Doing 列表中的任务;

    • 包括 TBD、TODO、Doing、Done 4 个泳道

  • 完成多个 Sprint 进行迭代

执行任务 番茄工作法

  • 用工具稳定效率

#idea 看到这个又想起自己之前的一些东西,想做的事情一直有,但是很多时候你都没有坚持下来。Notion 里面某一周的周回顾还写到用 1 年的时间打造一个可靠的外部系统。先写下一套方案,然后去迭代。


如何读论文【论文精读】

论文基本结构

  • 1.title

  • 2.abstract

  • 3.introduction

  • 4.method

  • 5.experiments

  • 6.conclusion

三遍法

  • 第一遍:标题(1)、摘要(2)、结论(6)。可以看一看方法和实验部分重要的图和表。这样可以花费十几分钟时间了解到论文是否适合你的研究方向。

  • 第二遍:确定论文值得读之后,可以快速的把整个论文过一遍,不需要知道所有的细节,需要了解重要的图和表,知道每一个部分在干什么,圈出相关文献。觉得文章太难,可以读引用的文献。

  • 第三遍:提出什么问题,用什么方法来解决这个问题。实验是怎么做的。合上文章,回忆每一个部分在讲什么。

如何找论文

  • 明确阅读论文的目标(学习、寻找方向)

  • 按主题整理论文(相同主题放在同一个笔记中,标记论文引用数、重点图片)

  • 使用图形化工具梳理论文的发展(一句话概况新的论文在旧的基础上提出哪一些改进)

  • 粘贴论文链接,通过脚本自动化下载论文以及提取元信息

文献管理与下载 python 脚本 https://github.com/Psycoy/EasyLiterature [[2023/10/30]]


学历自卑

学历和能力存在相关性,没有必然的因果性。学历是你一段时间统计的结果,大部分人很难逃过统计的命运(很难改变自己),所以看起来学历和能力存在因果性。

面对同一个问题,弗洛依德和阿德勒心理学分析的结果迥异,到底哪个分析结果更接近事物的本质?

  • 纳西姆·尼古拉斯·塔勒布的话来说,统计学、经济学以及心理学等这些软科学并非真正的科学 — — 软科学,是相对于自然科学等硬科学而言,没有绝对的真理。

自卑情节只是一种借口

  • 青年:不不,这是一种正儿八经的因果关系!如果学历低,就会失去很多求职或发展的机会。不被社会看好也就无法成功。这不是什么借口,而是一种严峻的事实。

  • 哲人:不对。

  • 青年:为什么?哪里不对?

  • 哲人:关于你所说的因果关系,阿德勒用“^外部因果律^”一词来进行说明。

    • 意思就是:将原本没有任何因果关系的事情解释成似乎有重大因果关系一样。

    • 例如,前几天就有人说:“自己之所以始终无法结婚,就是因为幼时父母离婚的缘故。”

    • 从弗洛伊德的[[原因论]]来看,父母离婚对其造成了极大的精神创伤,与自己的婚姻观有着很大的因果关系。

    • 但是,阿德勒从[[目的论]]的角度出发把这种论调称为“外部因果律”。

  • 青年:但是,现实问题是拥有高学历的人更容易在社会上获得成功啊!先生您应该也有这种社会常识吧。

  • 哲人:问题在于你如何去面对这种社会现实。如果抱着“我因为学历低所以无法成功”之类的想法,^那就不是“不能成功”而是“不想成功”了^。

  • 青年:不想成功?这是什么道理啊?

  • 哲人:简单地说就是害怕向前迈进或者是不想真正地努力。不愿意为了改变自我而牺牲目前所享受的乐趣——比如玩乐或休闲时间。也就是拿不出改变生活方式的“勇气”,即使有些不满或者不自由,也还是更愿意维持现状。


学习骇客写卡片笔记方法

最小学习闭环系列:卡片笔记的格式与模板 | 学习骇客 (qq.com)

笔记格式

  • 前三级文献信息:书名、章名、节名

    • 四级写问题

      • 五级写答案

      • 五级写补充

      • 六级原文

  • 微信读书笔记完美契合上面的格式

  • 纸质书不方便引用,可以在问题中标出原文的页码

例子


对角矩阵

左乘,对矩阵A的每一行数值进行不同比例缩放

  • Λn×nAn×D=[λ1000λ2000λn]n×n[a(1)a(2)a(n)]n×1=[λ1a(1)λ2a(2)λna(n)]n×1\boldsymbol{\Lambda}_{n \times n} \boldsymbol{A}_{n \times D}=\left[\begin{array}{cccc}\lambda_{1} & 0 & \cdots & 0 \\ 0 & \lambda_{2} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \lambda_{n}\end{array}\right]_{n \times n}\left[\begin{array}{c}\boldsymbol{a}^{(1)} \\ \boldsymbol{a}^{(2)} \\ \vdots \\ \boldsymbol{a}^{(n)}\end{array}\right]_{n \times 1}=\left[\begin{array}{c}\lambda_{1} \boldsymbol{a}^{(1)} \\ \lambda_{2} \boldsymbol{a}^{(2)} \\ \vdots \\ \lambda_{n} a^{(n)}\end{array}\right]_{n \times 1}

右乘,对矩阵 A 的每一列数值进行不同比例缩放

  • An×DΛD×D=[a1a2aD][λ1000λ2000λD]=[λ1a1λ2a2λDaD]\begin{aligned} \boldsymbol{A}_{n \times D} \boldsymbol{\Lambda}_{D \times D} &=\left[\begin{array}{llll}a_{1} & a_{2} & \cdots & a_{D}\end{array}\right]\left[\begin{array}{cccc}\lambda_{1} & 0 & \cdots & 0 \\ 0 & \lambda_{2} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \lambda_{D}\end{array}\right] \\ &=\left[\begin{array}{lllll}\lambda_{1} a_{1} & \lambda_{2} a_{2} & \cdots & \lambda_{D} a_{D}\end{array}\right] \end{aligned}

乘列向量:对列向量每个元素以不同比例分别缩放

乘行向量:对行向量每个元素以不同比例分别缩放

左右都乘:[[协方差]]矩阵

  • bij 相当于相关系数

对角矩阵元素特点 #card

  • 主对角线之外元素皆为 0

对角矩阵形状特点 #card

  • 可以是任何大小的矩阵,不要求是方阵

少楠通过 flomo 写 life log

记录内容 #card

  • 当日的情绪如何(分为 low、mid、good)

  • 当日的事情,从早到晚进行 log 一些概要,同时还有一些简单的感触

  • 记录情绪波动及原因:记录一天中自己的情绪发生了哪些变化,并尝试分析原因——比如,和什么事情有关、周围的环境如何、情绪是如何被触发的、引发了什么后果等

  • 当日创造性的时间

例子

  • 少楠的lifelog 2022/08/16 Lifelog/情绪/Good #card
    • 5 点多起床,翻看《神经的逻辑》 1 小时,做了两大段笔记,关于意识和潜意识系统,以及记忆的特点。

    • 上午开始处理客服问题,但是拖拖拉拉持续了一整天。

    • 午饭后本想开始设计 flomo 安卓版本的语音输入,但意识到这周不进入开发,优先级应降低,所以想了想框架就放下;然后设计优先级更高的编辑器——没有着急上手做,而是先思考了不同的可能,打了个草稿才开始。

    • 设计完编辑器,在户外写了图书新内容的草稿,推敲了逻辑结构,查找了不少资料,但是刻意没有进入正式写作流程,以免当日过于疲劳。

    • 处理客服问题,回家吃饭、休息。

    • 晚上又看了 1 小时资料,后半截感觉有点力竭,所以选择暂停输入,开始听歌休息。

记录的要点

  • 诚实面对内心,如实记录想法

    • 为什么诚实 #card

      • 记得有一天我情绪很低落,起因是有个营销方案我准备了许久,原本感觉胸有成竹,但在团队讨论时却爆出来一个很关键的缺陷,不得不重新来过。

      • 表面上看,这是一个思考不周的问题,但为何会让我情绪低落?通过自我追问和诚实地回答,我发现了更深层的原因:因为我觉得,我付出了那么多时间和精力,你们非但不鼓励,还一讨论就指出这么大的漏洞,让我下不来台,我的面子往哪里放?

      • 挖掘到这里,才触及问题的本源:自己情绪低落,是想要获得他人认可的预期被打破,继而产生了情绪上的反扑,想要找到别的理由去攻击他人。

    • 如何记录 #card

      • 第一,你可以试着把自己抽离出来,像观察最好的朋友那样观察自己。看到什么记什么,尽可能保持旁观者视角。

      • 第二,只记录,不评判。情绪没有好坏,不要苛责自己。当你把情绪当作“问题”的时候,往往会限制自己的视野;而当你把它当作“合理的存在”,视野反而宽广很多。

  • 不仅记录情绪,还要记录环境

    • 为什么要记录环境?:-> 因为人是环境的反应器,我们产生某种情绪,多半是受环境影响。如果我们换个环境,或者设计一个新环境,那么情绪也可能会随之变化。
    • 假如你的情绪陡然从开心变为沮丧,那么你可以记录一下, 在什么环境中发生了什么事情

并查集

使用 UnionFind uf(n);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
struct UnionFind {
int n;
vector<int> parent, size;
UnionFind(int n) {
this->n = n;
parent = vector<int>(n);
size = vector<int>(n, 1);
for (int i = 0; i < n; ++i)
parent[i] = i;
}
int find(int idx) {
if (parent[idx] == idx)
return idx;
return parent[idx] = find(parent[idx]);
}
void connect(int a, int b) {
int fa = find(a), fb = find(b);
if (fa != fb) {
if (size[fa] > size[fb]) {
parent[fb] = fa;
size[fa] += size[fb];
} else {
parent[fa] = fb;
size[fb] += size[fa];
}
}
}

unordered_map<int, vector<int>> components() {
unordered_map<int, vector<int>> res;
for (int i = 0; i < n; ++i)
res[find(i)].emplace_back(i);
return res;
}
};

平稳性

平稳性

  • 存在某种周期、季节性及趋势的方差和均值不随时间变化

  • 从统计学角度,平稳性要求对于一个时间序列的取值满足一个确定的分布

平稳性是时间序列分析的基础

  • 如果一个时间序列是不平稳的,需要通过 差分 的方式将其转化为平稳时间序列。
    严平稳 strictly stationary

  • 时间序列中任意给定长度的两段子序列都满足相同的联合分布

弱平稳 weakly stationary

  • 时间序列满足均值平稳性 stationary in mean 和二阶平稳性 secondary order stationary

  • 时间序列 $$r_t$$ 满足下面两个条件,则它是弱平稳的

    • 对所有时刻 t,有 E[rt]=μE[r_t] = \mu,其中μ\mu是常数。
    • 对于所有时刻 t 和任意时间间隔 k,rtr_trtkr_{t-k} 的协方差 σ(rt,rtk)=γk\sigma(r_t, r_{t-k}) =\gamma _k, γk\gamma _k 与 t 无关,仅依赖于时间间隔 k。
  • 方差平稳性 stationary in variance

    • 当 k=0 σ(rt,rt)=γt\sigma(r_t, r_{t}) =\gamma _t, γt\gamma _t 是一个与时间 t 无关的常数且不随时间变化。
  • 关于 对所有时刻 t,有 E[rt]=μE[r_t] = \mu,其中μ\mu是常数。
    的例子

    • 假设指数的日收益序列满足弱平稳条件,对于某一天指数日收益的期望可以用前一段时间的收益期望来近似估计。
  • 平稳的随机过程 stationary stochastic process

非平稳性

  • 非平平稳数据会导致虚假回归,表现为两个没有任务因果关系的变量,却有很高的相关性

[[ADF 检验]] :<- 判断时间序列是否满足平稳性要求

  • 特殊时间序列

    • 时间序列 wt,t=[1,n]{w_t, t=[1,n]}wtw_t 满足均值 0 方差为 σ2\sigma^2([[正态分布]]),且对于任意的 k>0,[[自相关]]系数均为 0,则称该时间序列为一个离散的白噪声。

      • Xt=wt,wt(0,σ2)X_t=w_t, w_t\left(0, \sigma^2\right)
    • 时间序列 xtx_t,满足 xt=xt1+wtx_t=x_{t-1}+w_twtw_t 是一个均值 0 方差为 σ2\sigma^2 的白噪声,则序列 xtx_t 为一个随机游走。

      • Xt=Xt1+wt,Xt(0,tσ2)X_t=X_{t-1}+w_t, X_t\left(0, t \sigma^2\right)
  • 思想

    • 基于随机游走,对 Xt 回归,如果发现 p=1,说明该序列满足随机游走,就是非平稳的。

      • ρk=Cov(rt,rtk)σrtσrtk=Cov(rt,rtk)σrtσrt=γkγ0\rho_k=\frac{\operatorname{Cov}\left(r_t, r_{t-k}\right)}{\sigma_{r_t} \sigma_{r_{t-k}}}=\frac{\operatorname{Cov}\left(r_t, r_{t-k}\right)}{\sigma_{r_t} \sigma_{r_t}}=\frac{\gamma_k}{\gamma_0},利用弱平稳的性质

      • Xt=Xt1+utX_t=X_{t-1}+u_t 随机游走,非平稳

      • Xt=pXt1+utX_t=p X_{t-1}+u_t 如果 p=1,则 Xt有一个单位根

  • from statsmodels.tsa.stattools import adfuller as ADF

    • ADF 函数计算结果

      • 第一个参数 T检验,假设检验值。

      • 第二个参数,P-value,假设检验结果。

      • 第五个参数,不同程度拒绝原假设的统计值

  • 如何判断是否平稳

    • ADF 假设检验值同时小于 1% 5% 10% 不同程度拒绝原假设的统计值,说明非常好地拒绝该假设

      • 原假设存在单位根

      • 统计值小于 1%,认为拒绝原假设,该序列是平稳的。

    • [[P-value]] 是否非常接近 0

Ref


差分数组

差分是一种和前缀和相对的策略,可以当做是 求和 的逆运算
求差分数据的公式 #card

  • bi={aiai1i[2,n]a1i=1b_{i}= \begin{cases}a_{i}-a_{i-1} & i \in[2, n] \\ a_{1} & i=1\end{cases}

性质

  • ai 是 bi 的前缀和

  • 计算前缀和#card

    •  sum =i=1nai=i=1nj=1ibj=in(ni+1)bi\text { sum }=\sum_{i=1}^{n} a_{i}=\sum_{i=1}^{n} \sum_{j=1}^{i} b_{j}=\sum_{i}^{n}(n-i+1) b_{i}
  • 区间序列 [l,r] 加上一个数 k #card

    • blbl+k,br+1br+1kb_{l} \leftarrow b_{l}+k, b_{r+1} \leftarrow b_{r+1}-k

例题

和树状数组区别 #card

  • 树状数组:单点更新,区间查询

  • 差分数组:区间更新,单点查询


广告系统

广告竞价划分 #card

  • ssp <-> adx(拍卖平台) <-> dsp

召回系统

精排,根据业务去挖掘特征

对模型效果比较重要的几部分

  • 数据流

    • 比较核心的目标是及时且准确地获取各种事件 (click,convert) 的 ground truth;“及时” 指的是 发生的事件需要尽可能快地喂给模型 ,“准确” 指的是 这些事件需要被正确打上 label。

    • 数据流与转化归因 (conversion attribution)

      • 归因可以理解为 label 的获取与拼接, 当前最常见的是 last touch 方式的归因,也有一些其他的归因方式如 multi-touch 归因等, 通常涉及到广告主的上报和实际的拼接两部分

      • [[delayed feedback]]

    • [[CTR Bias]]

      • [[exposure bias]] 只有曝光的样本才能进入训练集,[[负样本]]选择问题

      • [[position bias]]

    • 全渠道数据 [[全场景建模]]

      • 核心 :-> 将被 cvr 被低估的用户通过全渠道数据捞回来
      • 如何获得跨平台的样本? #card
        • 一种是广告主将媒体 A 的数据归因后直接回传给媒体 B,

        • 另一种则是媒体之间相互合作,如笔者做过的联邦学习在广告的落地应用就是属于这部分。

  • [[特征工程]] dnn 模型的特征选择

    • 常用挖掘套路 #card

      • 属性特征:用户 / 广告本身的一些属性,如用户的年龄、性别;广告的类别、样式等

      • 统计特征:用户在特定时间范围 (如过去 7d、 3d、 12h、1h 等) 对当前广告的特定的维度 (如特定类别、特定位置、特定广告主等) 的广告进行了特定操作 (如点击、浏览等) 的次数;

      • 序列特征:即用户在一段时间内的行为序列,如最近 30 个点击过的广告 / 商品;典型的应用可参考阿里的 DIN

    • [[特征筛选]]

      • 最简单的做法是删除指定特征,然后重新训练模型并评估,但是这种做法在训练时长较长时开销是比较大的

      • 在训练过程中便能得到每个特征的重要性

        • 为每个 feature 增加一个 attention unit,如 DIN [[activation unit]] #card

          • ,训练过程中通过这个 attention unit 输出的值来衡量每个特征重要性;其假设是对于重要特征,模型能够自动学习出其权重情况
        • embedding weight:#card

          • 根据每个 feature 对应的 embedding 的值大小来判断重要性, 常见的有基于 embedding 的 L1 norm,L2 norm 等;其假设是对于重要特征,其对应的 embedding 的值越大,类比 lr,其实 nn 可以近似认为是多个 lr 组成的
        • 回到最开始的想法,即删除指定特征,然后重新训练模型并评估,能否在训练过程中便达到这一目的呢?#card

          • 其实是可以的,在训练过程中通过 mask 的方式近似将 embedding 全置为 0,近似当做 drop 掉这个特征,然后通过 multi-head 的方式计算这部分 auc 即可。
  • 训练

    • 模型结构可解释性

      • VC Dimension:#card

        • VC Dimension 本质上是在描述数据量大小和模型大小的关系,即模型参数量应该与数据量大小成正比关系,否则容易出现过拟合或欠拟合的问题
      • attention:#card

        • attention 用最直白的话来说就是动态加权,而这也很符合直觉,如每个特征的重要性不一样,应该对重要性高的给予更高的权重;在 NN 模型中,attention 常用在两个地方: embedding 和 hidden unit;

          • embedding 的 attention 策略可参考这篇文章 SENet 双塔模型:在推荐领域召回粗排的应用及其它;

          • 而针对 hidden unit 的 attention 则可参考这篇 paper,Learning Hidden Unit Contributions for Unsupervised Acoustic Model Adaptation [[LHUC]]

      • multitask: multitask 结构有两个常见的用处,#card

        • 第一种认为多个 task 之间有关联,联合训练能增加数据量,同时提升效果;

        • 第二种则是对于预估值的准确性有要求的场景,如果广告的 ctr、cvr 的预估,往往数据流中混合了多个场景的数据,且每个场景对应的数据的后验不同的,为了保值预估值的准确性,需要将后验值不同的数据分到不同的 head 中

    • 模型训练

      • 初始化对效果有影响,而这个问题可以从几个角度去理解,

        • 从最优化的角度理解,#card

          • 是因为 NN 的优化往往是一个 non-convex 的问题, 如果初始化不好,一开始可能就处于一个不好的位置;
        • 从 bp 的角度理解,#card

          • 初始化的值过小或过大,容易导致梯度消失会梯度爆炸,关于这部分,deeplearning.ai 上的 Initializing neural networks 讲得比较好了,还辅以实践,推荐读一下。
      • 优化器 #card

        • 训练过程本质上就是个优化问题,通过 bp 过程不断修正初始化的 parameter,从而达到损失函数最小的目标,更详细的描述可以参考 Parameter optimization in neural networks;中间涉及到了各种超参数的选择:如 learning rate、batch size、optimizer 等;

        • 其中 optimizer 也有非常多的选择,其中 optimizer 的选择往往又是一个值得考量的地方,关于各类 optimizer 的区别可以参考这篇文章,一个框架看懂优化算法之异同 SGD/AdaGrad/Adam

      • 损失函数

        • 损失函数基本都是通过 MLE 或 MAP 推导出来的,其思想都是假设训练样本都是服从某些分布生成的,而训练的目标是让这些样本的联合概率最大;#card

          • 如 mse 的 assumption 是模型预估值与 ground truth 的误差服从正态分布,

          • cross entropy 的 assumption 是预估值服从伯努利分布;

          • 而这两个其实也能被统一到 GLM 这个框架下。

        • 目前在业界更常见的做法是把问题转为分类问题,对应的 loss 即为 cross entropy,而其实一些回归的 loss 也能通过 weighted logistics regression 转化为分类的问题,#card

          • 比较经典的就是 youtube 的 Deep Neural Networks for YouTube Recommendations 中 Modeling Expected Watch Time 部分;
        • 基于最原始 cross entropy 衍生出来的 loss 主要有两种形式#card

          • reweight, 即对样本进行各种加权, 包括但不限于根据物理含义直接加权 (如观看时长)、通过 importance sampling 等方式推导出来的 loss,其最终形式也是 reweight 的模式

          • auxiliary/regularization, 即在原始的 task 上增加一些辅助任务或正则项,如 center loss 等

  • 预估纠偏 [[CTR 校准]]

    • [[保序回归]]

    • 上面在 loss 中对样本进行 reweight 的方式,会影响正负样本的分布,导致统计意义上预估值的就是有偏的,应对的策略#card

      • 可以在训练阶段就进行纠偏,或者在预估值上直接做一个转换,这部分内容可参考这篇文章 Delayed FeedBack In Computational Advertising 的 Fake negative calibration

出价 [[bidding]],计算广告相对于推荐最大的不同点

[[冷启动]]

  • 利用 meta-network 为冷启动的 item 生成一个 id embedding

    • item 的 meta 信息通过小网络生成 embedding

    • 增加一些 [[auxiliary task]] 来训练小网络

  • MAML 方法训练模型,让 embedding 更快收敛

Ref


张量积

任意两个大小矩阵之间的运算

ABA \otimes B

ab=[a1a2an]n×1[b1b2bm]m×1=abT=[a1a2an][b1b2bm]T=[a1b1a1b2a1bma2b1a2b2a2bmanb1anb2anbm]n×m\boldsymbol{a} \otimes \boldsymbol{b}=\left[\begin{array}{c}a_{1} \\ a_{2} \\ \vdots \\ a_{n}\end{array}\right]_{n \times 1} \otimes\left[\begin{array}{c}b_{1} \\ b_{2} \\ \vdots \\ b_{m}\end{array}\right]_{m \times 1}=\boldsymbol{a} \boldsymbol{b}^{\mathrm{T}}=\left[\begin{array}{c}a_{1} \\ a_{2} \\ \vdots \\ a_{n}\end{array}\right]\left[\begin{array}{c}b_{1} \\ b_{2} \\ \vdots \\ b_{m}\end{array}\right]^{\mathrm{T}}=\left[\begin{array}{cccc}a_{1} b_{1} & a_{1} b_{2} & \cdots & a_{1} b_{m} \\ a_{2} b_{1} & a_{2} b_{2} & \cdots & a_{2} b_{m} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n} b_{1} & a_{n} b_{2} & \cdots & a_{n} b_{m}\end{array}\right]_{n \times m}

AB=[a1,1a1,2a2,1a2,2][b1,1b1,2b2,1b2,2]=[a1,1Ba1,2Ba2,1Ba2,2B]\boldsymbol{A} \otimes \boldsymbol{B}=\left[\begin{array}{ll}a_{1,1} & a_{1,2} \\ a_{2,1} & a_{2,2}\end{array}\right] \otimes\left[\begin{array}{ll}b_{1,1} & b_{1,2} \\ b_{2,1} & b_{2,2}\end{array}\right]=\left[\begin{array}{ll}a_{1,1} \boldsymbol{B} & a_{1,2} \boldsymbol{B} \\ a_{2,1} \boldsymbol{B} & a_{2,2} \boldsymbol{B}\end{array}\right]

几何解释

离散随机变量独立条件下,联合概率 pxy 是 px 和 py 的边缘概率的乘积 [[从加减乘除到机器学习/矩阵力量]] ch02


怎么样读文献才比较高效

反复做一件事,机会成本太高。

每星期阅读三篇

记录什么

  • 文献的基本信息(期刊、年限、作者);

  • 重要结论

  • 重点公式

  • 重点图片

  • 个人收获

  • 存在的问题及如何解决


我的 Mac 设置

使用 [[iTerm]] 作为终端

  • [[Oh My Zsh]] zsh 配制文件

  • [[autojump]]

    • add [ -f /opt/homebrew/etc/profile.d/autojump.sh ] && . /opt/homebrew/etc/profile.d/autojump.sh to .zshrc

    • add autojump to .zshrc plugins=(...)

  • [[git-open]]

    • git clone https://github.com/paulirish/git-open.git $ZSH_CUSTOM/plugins/git-open

    • .zshrc change plugins=(...) to plugins=(... git-open)

  • zsh-syntax-highlighting 用绿色高亮输入正确的命令

    • git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
  • zsh-autosuggestions 命令补全建议

    • git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

[[Homebrew]] 管理应用下载

  • mathpix-snipping-tool [[Mathpix]] 数学公式截图转 latex 格式

  • ffmpeg 视频处理

[[Dropbox]]

[[Microsoft Edge]]

  • [[简悦]]

[[坚果云]]

[[截图 Jietu]]

[[Alfred]]

[[Squirrel]]

  • 用户配置文件 ~/Library/Rime

  • installation.yaml

[[Logi]] Options

  • MX Master 2s 鼠标配置

  • 滚动模式,逐段模式

[[Zotero]]

[[PDF expert]]

[[DEVONthink]]

[[VS Code]]

[[Sublime Text]]

[[Sublime Merge]]


戴晓天论文笔记模板

阅读时整理、记录作者的思想和结论。做好标签和分类

维护核心文献列表

论文笔记框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# {Title}(文章标题)
{Year}, {Authors}, {Journal Name}
{引用格式}

## Summary

写完笔记之后最后填,概述文章的内容,以后查阅笔记的时候先看这一段。注:写文章summary切记需要通过自己的思考,用自己的语言描述。忌讳直接Ctrl + c原文。

## Research Objective(s)

作者的研究目标是什么?

## Background / Problem Statement

研究的背景以及问题陈述:作者需要解决的问题是什么?

## Method(s)

作者解决问题的方法/算法是什么?是否基于前人的方法?基于了哪些?

## Evaluation

作者如何评估自己的方法?实验的setup是什么样的?感兴趣实验数据和结果有哪些?有没有问题或者可以借鉴的地方?

## Conclusion

作者给出了哪些结论?哪些是strong conclusions, 哪些又是weak的conclusions(即作者并没有通过实验提供evidence,只在discussion中提到;或实验的数据并没有给出充分的evidence)?

## Notes

(optional) 不在以上列表中,但需要特别记录的笔记。

## References

(optional) 列出相关性高的文献,以便之后可以继续track下去。

例子


推荐算法的"五环之歌"

#card 第一维度 记忆与扩展

  • 记忆与扩展是推荐系统的两大永恒主题。推荐模型要能记住高频、常见模式以应对“红海”​,也能够扩展发现低频、小众模式以开拓“蓝海”​。

  • 这个观点在3.1节讲Embedding的前世今生时已经提到过,4.2.3节将会讲到,经典的Wide & Deep模型就是记忆与扩展在模型设计中的体现。

#card 第二维:Embedding

  • Embedding技术将推荐算法由根据概念的精确匹配(生搬硬套)升级为基于向量的模糊查找(举一反三)​,极大增强了模型的扩展能力,是推荐系统中所有深度学习模型的基础。

  • 将特征、函数转化为待优化变量

  • CTR 从精确匹配到模糊搜索

#card 第三维 高维、稀疏的类别特征

  • {{embed 稀疏的类别/ID类特征,稀疏地存储、传输、运算,提升运算效率
    }}

  • 数值特征离散化分桶

    • 为什么不用“特征是用户过去1小时观看的视频数,数值是3”这个方案,而是采用“特征是用户过去1小时观看小于10个视频,数值是1”的方案?#card

      • 增加模型鲁棒性

      • 减少数据稀疏

      • 将连续数值特征变换为离散特征,相当于将特征变换到更高维度的空间,更有利于模型对特征的进行区分(尤其对于线性模型)。

    • 特征和目标不是线性关系

    • LR 预测时只需要累加不需要做乘法

    • 模型存储小以及线上预测速度快

  • [[Parameter Server]] 解决存储问题和预测问题

    • 同步 batch 中覆盖的及少数特征
  • [[FTRL]] 每一维特征自适应调整学习率,[[DIN]] 每维特征自适应调节正则系数。

#card 第四维 特征交叉

  • 高阶交叉 DNN

  • 混合交叉 [[Wide&Deep]] 记忆和扩展

    • [[DCN]]浅层高阶交叉没有太多意义

#card 第五维 Field & Pooling 特征集合/用户行为序列建模

  • 解决特征直接 concat 问题后维度过高问题,同一个 Filed 的 Feature Embedding Pooling 成 Field Embedding

  • Pooling 方法

    • mean max

    • [[NFM]] Bi-interaction

    • 加权平均 Attention

    • 时序特征 RNN

      • RNN 等时间间隔
  • 推荐系统的核心任务是猜测用户喜欢什么,而用户在App内部的各种行为(比如浏览、点击、点赞、评论、购买、观看、划过)组成的序列,隐藏着用户最真实的兴趣,是尚待我们挖掘的宝藏。

  • 因此,基于用户行为序列的兴趣建模是推荐模型的重中之重。用户行为序列数据量大(短期行为几十、上百,长期行为成千上万)​,单个行为包含的信息有限而且随机性强,将这些行为序列压缩成一个或几个固定长度的用户兴趣向量绝非易事。


推荐系统 embedding 技术实践总结

embedding 和 ont 如何对比?

基于词向量的固定表征:word2vec、fastText、glove

基于词向量的动态表征:elmo、GPT、bert。

[[DSSM]] 保证 user 和 item 在同一个向量空间,之后可以进行计算。

基于 embedding 的召回

  • [[i2i 召回]] 算法

    • tag2vec:取文章的部分标签向量代表文章的向量(对应多个 embedding 如何处理)

    • item2item 计算:faiss 计算每篇文章的相似文章

      • content i2i
    • 其他召回和这个套路类似,就是训练 embedding 向量的时候,略有差异。tag2vec 是训练中文词语的向量,而 item2vec 是训练文章 ID(aid)所对应的向量,media2vec 训练的是文章的作者 ID(mid)所对应的向量,loc2vec 是训练地域名称所对应的向量,title2vec 是用 LSTM 训练得到的文章标题向量,doc2vec 是用 bert 计算出的文章正文(或者摘要)的向量。entity2vec 是利用我们自己构建的知识图谱通过 transE 得到的

  • u2i 召回

  • 分群召回

image.png

+ 方法

  + 簇召回,用户 tag 用聚类算法聚成若干个簇
  • 增量聚类

其他

  • [[Youtube DNN]] 是开山之作

    • 所有特征(无论离线连续,单值多值)全部转化为 embedding,

    • 把各种 embedding 拼接在一起构成一个向量送入 dnn。

  • Airbnb 在稀疏样本构造上有所创新。

    • 分群 embedding

    • 用户和 item 混合训练

特征 embedding

embedding 运算

image.png

embedding 痛点

  • 增量更新的语义不变性

  • 很难同时包含多个特征

  • 长尾数据难以训练

embedding 总结 #card
image.png


操作系统

线程和进程

  • [[线程]] 一段线性执行的程序

    • 多线程实现并行计算,操作系统将这些线程分配给多个 CPU 同时运行,它们使用不同的寄存器,但可以共享同一个内存空间。
  • [[进程]] 操作系统提供给每个应用程序的一个隔离环境(CPU 和内存)

    • 分配 CPU 的调度机制,尽量均匀分配 CPU。

    • 分配内存的虚拟内存机制

    • 多进程为了多个应用程序提供隔离环境

  • 在一个进程里使用多线程使用的是同一套上下文,多进程使用的是不同的上下文和内存空间

  • [[协程]] 线性逻辑

    • 在一个线程上进行多条逻辑线的运行,物理上是顺序执行,不存在并行的qkl,但逻辑上是有多条逻辑线

Ref


搜广推算法

[[搜广推算法的意义]]

[[Feature Engineering]]

  • 可以划分成一下几个维度 #card
    • 用户侧特征(profile、bias)

    • item侧特征(属性、bias)

    • context侧特征

    • 笛卡尔积特征(id类、可泛化类特征)

    • 序列特征

[[Query Processor]]

  • [[Query 类目预测]] :-> 对用户query进行分类,判断用户的商品类目意图
  • [[Query 改写]] :-> 通过对用户的query进行归一、纠错、拓展、丢词等处理,做到更好的商品召回和匹配。
    • Query 归一 :-> 通过简单的字符串处理进行query改写,如去空格、大小写转换、特殊字符处理等,为最简单的query改写方式。
    • Query 纠错 :-> 对有拼写错误的query进行主动纠错,减少误召回,提升召回数量和准确性。
    • Query 丢词 :-> 对于空结果、少结果query进行非关键词的丢弃,一般用于二次召回,提高召回数量。
    • [[Query 拓展]] :-> 根据query语义或意图进行拓展,找到与源query意图一致的一组query,并与源query一同进行检索,进而丰富搜索召回的结果。
  • [[Query 实体识别]] :-> 对query进行序列标注,识别query中的品牌、品类等属性信息,以帮助更精细的匹配用户意图。
  • [[Query term weighting]] :-> 通过识别query中term的重要度,理解用户核心意图,进一步提升query和商品的相关性。

[[召回]] 覆盖率和多样性

[[相关性]]

[[粗排]] 海选

  • 粗排阶段的目标是从约上万级别的候选中筛选出合规、相关且成交效率高的topN商品,这里N通常是上千量级。

  • baseline 模

  • 优化方法

    • COLD 实现深度特征交叉 [[三塔粗排模型]]

    • 通过模型蒸馏技术逼近粗排和精排的排序效果、

    • 通过多任务联合综合考虑多目标的优化等

  • 用 bias 去换 variance

    • [[@推荐系统中,粗排和精排的区别是什么,粗排又应该怎样评估模型好坏?]]

      • [[粗排目标是判断item是否在精排 topk]]
  • [[粗排样本选择]]

  • [[粗排模型评估方法]] auc 或 hitrate

  • [[粗排分数融合]] 线性融合or离散化分档

  • [[粗排工程优化]]

[[精排]]

  • [[协同过滤]]:协同大家的反馈、评价和意见一起对海量的信息进行过滤,从中筛选出目标用户可能感兴趣的信息的推荐过程。

  • [[矩阵分解]]:使用更稠密的隐向量表示用户和物品,挖掘用户和物品的隐含兴趣和隐含特征。

    • [[Neural CF]] 利用 MLP 替代原来 MF 中的点击
  • [[Logistic Regression]] 在使用 user 和 item 是否交互以及交互程度信息的基础上,使用 context 信息、user 和 item 相关信息,并将推荐看成分类问题

    • 稀疏性

      • [[Lasso Regression]] L1

      • [[Ridge Regression]] L2

  • [[FM]] 自动建模特征间的二阶交叉

  • [[Tree Model]]

  • #card [[GBDT+LR]] 利用 GBDT 产生高维非线性特征

    • 树模型很难学习高度稀疏数据的特征组合

    • 树的深度决定是几阶交叉

    • GBDT 的特征转化方式实际上失去了大量特征的数值信息,不一定就会比 FFM 效果好。

  • [[MLR]] 通过多个局部 model 解决长尾问题

    • 端到端的非线性学习能力,模型稀疏性强。
  • DNN & Embedding

    • 典型的深度CTR模型可以分成以下四个部分:输入、特征嵌入(Embedding)、特征交互(有时候也称为特征提取)和输出。

      • input->embedding

      • embedding:concatenate, product, weight sum, bi-interaction

      • embeding->output

        • 这一步中如果使用 mean pooling 会丢失部分信息
    • 通过 embedding 来对输入数据进行降维

    • [[POLY2]] 暴力组合交叉特征

    • [[FNN]] 解决 DNN 中输入的特征过多,利用 FM 预训练的隐向量做 embedding,然后接 MLP。没有端到端训练,降低深度学习模型复杂度和训练不稳定性。

    • [[Wide&Deep]] 模型两种能力,人工特征工程,联合训练

    • [[PNN]] 将特征交叉的结果输入到 DNN 中,在不同特征域之间进行特征交叉。左边 emb 层的线性部分,右边 emb 层的交叉部分 向量内积和外积。交叉方式多样化,但是对所有的特征进行无差别交叉。

    • [[NFM]] Deep 部分进行修改,引入特征交叉池化层。二阶交叉不去sum pooling,而是后接一个 MLP

    • [[Deep Crossing]] embedding + MLP 结构,摆脱人工特征工程,特征深度交叉。

    • [[ONN]]

    • [[Deep&Cross]] 二阶交叉到高阶交叉之间的特征交叉,bit-wise 特征交叉。

      • Cross网络 利用 Cross 网络替代原来的 Wide 部分。
    • [[DeepFM]] FM+Embedding+MLP

    • [[xDeepFM]] vector-wise 交叉

    • [[Attention]] 机制作用于深度神经网络,将原来的 pooling 改成加权求和或加权平均

      • [[AFM]] 二阶交叉部分引入 [[Attention]] ,后来没有接 MLP

        • 注意力网络:简单全连接层 + softmax 输出层
      • [[DIN]]

        • DICE 激活函数

        • GAUC

        • Adaptive 正则化方法

      • [[DIEN]] 关注序列信息,通过 AUGRU 机制模拟用户兴趣进化的过程。

    • [[DeepMCP]]

    • [[AutoInt]] 特征工程自动化

  • [[@MMOE或PLE 在推荐系统点击&成交联合训练的场景下为什么跟 ShareBottom 效果差不多?]]

  • [[行为序列建模]]

    • [[为什么在推荐系统中引入注意力机制能够有效果上的提升?]]

    • [[搜推算法的序列建模需要做self-attention吗?]]

    • [[序列建模可以建模联合概率吗]]

  • [[多任务和多目标]]

  • [[Life Long Learning]]

  • [[交叉维度看精排模型]]

[[重排]]

机制 auction 和策略

  • LTR

    • 模型或者规则的泛化能力要强,需要适应精排模型结果的强烈变化
  • [[为什么需要做校准]]

[[混排]]

横向技术

[[搜广推大模型]]

[[推荐系统]]

[[搜索系统]]

  • [[排序模型优化]] 从数据(label)、特征和模型(网络结构)三个方面入手

  • 查询建议 SUG

  • [[单列和双列]]

  • [[垂搜 vs 通搜]]

[[广告系统]]

不同算法之间的区别

参考资料


数字坟墓

人的一生,要死去三次:

  • 第一次,当你的心跳停止,呼吸消逝,你在生物学上被宣告了死亡;

  • 第二次,当你下葬,人们穿着黑衣出席你的葬礼,他们宣告,你在这个社会上不复存在,你悄然离去;

  • 第三次,是这个世界上最后一个记得你的人,把你忘记,于是,你就真正的死去,整个宇宙都不再和你有关。

[[张潇雨]]在人生总有一刻,我们会开始思考死亡 - 知乎总结到面对死亡的两种方法:

  • 一种是将自己与一些更宏大的东西联系起来:**一个数学定理、一本文学著作、一件艺术作品或一种恒久的信仰。**马尔克斯与康德靠《百年孤独》与《纯粹理性批判》遗世独立,米开朗基罗把《创世纪》和《最后的审判》印刻在西斯廷大教堂里,供千万后朝拜——他们肉身虽灭,但精神不朽——反正建筑是永远戳在那儿的。还有一种就是,生活在当下的每个瞬间里,不烦扰过去、不担忧将来

Joe Armstrong(R.I.P.) 去世前几个月一直在将博客文章迁移到 [[TiddlyWiki]],最后通过 Github Pages 部署发布。Joe 在 2018-12-26 Fun with the TiddlyWiki 提到 「I hope the blog will be readable in 100+ years time.」

类似的 Jeremy Ruston (@Jermolene)Announcing the release of TiddlyWiki v5.1.23 写到「To corrupt an old adage, TiddlyWiki will die when the last person speaks its name. Right now there’s a chorus of voices lifting the project, and let’s hope that will long continue.」

对我们,可能很难实现张潇雨说的那种将自己和更宏大的东西联系在一起,但可以轻松借助互联网让文字或想法一直被检索发现。何尝不是另一种面对死亡的方法?

部分人将 Blog 音译成「不老阁」,它是我们这一代人的数字坟墓。

[[Ref]]


方差

有偏估计与[[无偏估计]]

  • 样本方差与整体方差相等时是无偏估计,样本方差分母是 n-1 为了追求无偏估计

方法论

[[how to read a paper]]

[[Spaced Repetition]]

  • [[Anki]]

    • [[使用 Anki 进行增量阅读]]

[[Zettelkasten]]

  • [[Antinet Zettelkasten]]

    • [[本恰恰谈 Antinet Zettelkasten]]

实践参考

  • [[chyixian]]

  • [[两阶段笔记]]

  • [[@seanmiona 卡片笔记法参考]]

  • [[@如何在 Roam Research 做学术研究:一个实例]]

输出

[[项飙]]所说,如何理解自己身边的事情。

Hum 方向与工具之争

找到方向和掌握工具思维,我从做 Power+ 这一年里学到的两件事

⚙️【方法论】我的效率提升方法论 - 工具使用篇 ⑥ 字节员工@


无偏估计

计算总体的均值和方差时,拿到的数据是对总体的采样,因此计算出的方差比总体方差小σ2n\frac{\sigma^2}{n}


时间序列分解

时间序列分解为周期项 + 趋势项 + 节假日项

分解方式

  • 分类

    • 加性

      • Yt=St+Tt+RtY_t=S_t+T_t+R_t
    • 乘性

      • Yt=St×Tt×RtY_t=S_t \times T_t \times R_t
  • ^S^eason

    • 计算原始序列数据-趋势值之后的 detrend 值在周期内的均值
  • ^T^rend

    • 计算序列的[[移动平均]]

    • sktime 多项式回归

  • ^R^esidual

    • 原始数据 - Season - Trend
  • [[Python/package]] statsmodels.tsa.seasonalseasonal_decompose

季节性和周期性

  • 季节性总是具有固定的已知频率

  • 周期性的波动频率不是固定的

时间序列分解1 - 知乎 (zhihu.com)

  • 时间序列分解如何和时间序列预测结合?

    • gbdt 外推能力差,对于趋势性强的时间序列数据的拟合能力比较差,通过时间序列分解之后去除趋势性部分,剩下季节性+残差部分用 gbdt 进行拟合。

    • 扩展开来趋势项可以用 lr 或 nn 拟合,剩余部分使用 gbdt 拟合

      • 双重误差问题,gbdt 在 lr 或 nn 基础上再进行拟合,如果外推模型本身存在过拟合,gbdt 会错上加错。
    • 缺点

      • 经典时间序列分解方法简单,精度低。电商的节假日无法分解

      • 季节性分解做的比较简单,每一个周期内的值都是不变的

      • 无法分解多个周期性嵌套的时间序列问题


时间序列专题学习

[[时间序列预测]]

  • 时间序列分析的核心是挖掘该时间序列的自相关性

  • [[石川@写给你的金融时间序列分析]]

  • DONE [[随风@时间序列分析]] 知乎上写的很好教程:包括基础知识讲解(还是石川讲得更加详细)以及通过支付宝数据演示如何利用各种方法和模型。

  • DONE [[字节@漫谈时间序列预测]]
    completed:: [[2023/02/27]]

  • [[Time Series Forecasting With Deep Learning: A Survey]] 牛津大学关于时间序列预测深度学习方法总结

  • [[Deep learning for time series classification: a review]] 时间序列分类

[[时间序列分解]]

比赛相关

[[@Time-series Extreme Event Forecasting with Neural Networks at Uber]]

[[Time Series Transformer]]

[[@A Transformer-based Framework for Multivariate Time Series Representation Learning]]

[[N-BEATS]]

[[DeepAR]] 用概率预测代替点估计,通过采用求平均方式得到最终预测

[[@Do We Really Need Deep Learning Models for Time Series Forecasting?]]

[[Recurrent Neural Networks for Multivariate Time Series with Missing Value]]

时间序列增强

  • Time Series Data Augmentation for Deep Learning: A Survey

时间序列缺失值处理

判断 Missing at Random 还是 Missing not at Random

  • 前者删除,后者插补

直接删除法

  • 舍弃数据中的一些重要信息

基于统计学的填充方法

  • 均值填充,中值填充,常用值填充,上下填补法,前后加权均值法

  • 忽略数据的时序信息

基于机器学习的填充方法

  • [[KNN]],[[RNN]],[[EM]],[[MF]]

  • [[E2GAN]] 时间序列插值算法框架,利用 GAN 来进行时间序列插值

  • 很少考虑两个相邻数据间的时序信息

Ref


时间序列预测

[[平稳性]] 是时间序列分析的基础,通过 [[ADF 检验]] 判断时间序列是否满足平稳性的要求。

[[时间序列预测/基本数学概念]] 介绍自协方差、自相关系数、偏自相关系数等概念。

[[时间序列预测/评价指标]]有 [[R2 score]]、MAE、MAPE、SMAPEWMAPE 等。

[[传统时间序列预测]]以 AR、MR、ARMA、ARIMA 等序列自回归方法为主。

[[深度学习时间序列预测]]

[[时间序列特征工程]] 三个方向: 时间戳衍生
, ((6302f9ee-1eb7-47ab-af57-17f933664bcb)), ((6302f9ee-52e1-48af-86b1-4e01ff3a4a64))

任务分类

  • Forecasting step

    • one-step

    • multi-step

  • Inputting variables

    • autoregressive

    • covariate

  • Outputting

    • Single point

    • Probability

  • Forecasting target

    • univariate 单变量

    • multivariate

[[时间序列预测/Ref]]

[[Transformer 是否适合时间序列预测]]


时间序列预测/Ref

关于时间序列预测的一些总结 - 知乎 (zhihu.com)

  • 特征工程使用滑动窗口,最小值,最大值,均值,方差

  • 概念漂移

    • 目标标量的统计特征随着时间的推移以不可预见的方式变化,每过一段时间序列的规律会变化。

    • 不能用全部时间内的数据去训练

  • 序列自相关性

    • 如果预测结果和实际值存在滞后性,可能序列存在自相关性,可以通过差分运算消除自相关性

    • 计算一个基准值,用基准值做为预测结果计算平均绝对误差或 r2 系数

  • [[时间序列分解]]

    • 针对明显周期和非平稳时序数据,可以利用经验模式分解(empirical mode decomposition,EMD)和长短期记忆(long short-term memory, LSTM)的组合算法应用于预测

时间序列和回归分析有什么本质区别? - 知乎 (zhihu.com)

  • 时间序列分析的目标是:了解过去,预测未来

  • 时间序列数据的特征是

    • 自相关性

    • 不可交换性(样本顺序不能交换)

  • 时间序列利用数据之间的相关性进行预测,回归分析假设每个数据点都是独立的。

有什么好的模型可以做高精度的时间序列预测呢? - 知乎 (zhihu.com)

  • 预测打车订单和预测风速的区别

    • 形成机制

      • 前者人的行为驱动,后者由自然因素驱动

      • 人为因素驱动内在机理比较清楚

      • 自然因素驱动内在机理难以刻画

    • 预测人群行为相对来说更加简单

      • 个人行为有明显的规律性(早晚)

      • 个人行为有明显的周期性(每周)

      • 不同人的行为近似独立(你打车和我打车没有关系)

      • 打车订单可以看成大量的独立随机变量之和,波动性不大,呈现出明显的周期性

    • 风速预测难点

      • 时间粒度细

      • 影响风速的因素多,且难以量化

      • 风的周期通常以年为单位,对短期风速预测帮助不大

      • 风通常分为大风年和小风年,没有趋势项。搞清楚了大小风年有利于评估全年风力资源,但对短期风速预测帮助不大。

  • [[ARIMA]] 描述平稳的时间序列自相关性的典型方法

    • 当残差通过白噪声检验,表示建立一个合理的模型。

    • 如果需要给出置信区间,需要对残差的平方进行白噪声检验。

    • 如果存在异方差,需要通过 [[GARCH]] 进一步提取残差信息

  • [[时间序列分解]]

    • STH 分解

      • [[Prophet]]

      • 时间序列分解为周期项 + 趋势项 + 节假日项

      • 趋势项通过线性函数、对数函数和指数函数拟合

      • 周期项通过傅里叶分解、周期核函数拟合

    • 信号分解

      • 将时间序列分解为高频和低频信号,对分离后的信号用模型拟合

      • 分解方法

        • 傅里叶分解

        • 小波分解

        • 经验模态分解 EMD

        • 变分模态分解 VMD

    • LN 分解

      • 将时间序列数据分解成线性项L和非线性项N,再拟合。

时间序列预测/基本数学概念

自协方差

  • 信号与其经过时间平移的信号之间的[[协方差]]

    • 信号与其自身经过一定时间平移之后的相似性
  • r(k)=1nΣt=k+1n(ZtZˉ)(ZtkZˉ)r(k)=\frac{1}{n} \Sigma_{t=k+1}^n\left(Z_t-\bar{Z}\right)\left(Z_{t-k}-\bar{Z}\right)

[[自相关]]系数 ACF

  • ACF(k)=Σt=k+1n(ZtZˉ)(ZtkZˉ)Σt=1n(ZtZˉ)2A C F(k)=\Sigma_{t=k+1}^n \frac{\left(Z_t-\bar{Z}\right)\left(Z_{t-k}-\bar{Z}\right)}{\Sigma_{t=1}^n\left(Z_t-\bar{Z}\right)^2}

  • 衡量信号其自身在不同时间点的相关度

  • 找出重复模式或识别隐含在谐波频率中小时的基频

偏自相关系数 [[PACF]]

  • 自相关衡量想要衡量 z(t) 和 z(t-k) 的相关关系,实际上 z(t) 还会受到 z(t-1) 到 z(t-k-1) 的影响。

  • PACF 单纯测量 z(t-k) 对 z(t) 的影响

    • PACF(k)=E(ZtEZt)(ZtkEZtk)E(ZtEZt)2E(ZtkEZtk)2=cov[(ZtZˉt),(ZtkZtk)]var(ZtZˉt))var(ZtkZtk)P A C F(k)=\frac{E\left(Z_t-E Z_t\right)\left(Z_{t-k}-E Z_{t-k}\right)}{\sqrt{E\left(Z_t-E Z_t\right)^2} \sqrt{E\left(Z_{t-k}-E Z_{t-k}\right)^2}}=\frac{\operatorname{cov}\left[\left(Z_t-\bar{Z}_t\right),\left(Z_{t-k}-Z_{t-k}^{-}\right)\right]}{\left.\sqrt{\left.\operatorname{var}\left(Z_t-\bar{Z}_t\right)\right)} \sqrt{\operatorname{var}\left(Z_{t-k}-Z_{t-k}^{-}\right.}\right)}
  • 偏相关

    • 计算某一个要素对另一个要素的影响或相关程度时,把其他要素的影响视为常数u,即暂时不考虑其他要素的影响,而单独研究那两个要素之间的相互关系的密切程度
  • PACF 和 ACF 区别

    • ACF 一个期望,用整个时间序列的期望

    • PACF 两个期望,两个序列用各自序列的期望


期望

离散情况下:结果乘以结果概率的总和

连续 $$E(x) = \int xf(x)dx$$


机器学习

原则

  • 将学习的内容整理进入自己的框架,放在其他单独的页面没有价值。

    • 暂时不知道放在哪里的内容先统一放到一个地方
  • 参考[[AI算法工程师手册]]整理到什么程度

  • 之前遗留下来的

    • [[@百面机器学习]]

    • 李宏毅强化学习笔记

    • [[一文看懂深度学习模型压缩和加速]] 整理到模型压缩和相关部分

    • [[白板机器学习]]

什么是机器学习?

  • Mitchell 「对于某类任务 T 和性能度量 P,一个计算机程序被认为可以从经验 E 中学习是指,通过经验 E 改进后,搭载任务 T 上由性能度量 P 衡量的性能有所提升。」

  • 机器学习本质属于应用统计学,更多关注于如何用计算机统计估计复杂函数。

  • 基础知识 + 模型 + 实践

    • 模型可以从两个地方获得:论文以及工业实践的文章

任务分类

  • 样本特征向量和标签之间存在未知函数关系

  • 条件概率 $$p(y|x)$$ 服从某个未知分布

算法分类

  • 监督学习

    • 期望风险最小化

    • 最大似然估计

  • 无监督学习

    • 最大似然估计

    • 最小重构错误

  • 强化学习

理论和定理

  • 可能近似正确(Probably Approximately Correct,PAC)学习理论

  • 没有免费午餐定理(No Free Lunch Theorem,NFL)

  • [[奥卡姆剃刀]]

  • 丑小鸭定理(Ugly Duckling Theorem)

    • “丑小鸭与白天鹅之间的区别和两只白天鹅之间的区别一样大”
  • [[inductive bias]]

    • 贝叶斯学习中的先验[[Prior]]

基础知识

数据处理

  • [[特征工程]] 是当前大多数机器学习任务的瓶颈。

  • [[Normalization]]

    • [[为什么要做归一化]]

    • [[归一化方法]]

    • [[归一化和标准化]]

    • [[Internal Covariance Shift]]

    • [[Normalization 实战]]

    • [[Normalization操作的Re-Scaling不变性]]

    • 不同变种

      • [[Batch Normalization]]

        • [[Batch Normalization/维度理解]]

        • [[Batch Normalization/多卡同步]]

        • [[Batch Normalization 为何有效]]

      • [[Group Normalization]]

      • [[Layer Normalization]]

      • [[Instance Normalization]]

  • [[Initialization]]

  • [[Standardization]]

  • [[离散化]]

    • [[离散化方法]]

    • [[离散化和归一化有哪些优缺点]]

基础知识

评估指标

  • [[AUC]]

    • [[gauc]]

    • [[Base AUC]]

[[Tree Model]]

[[Logistic Regression]]

[[VAE]]

[[FM]]

  • [[FM模型与逻辑回归相比有什么优缺点?]]

深度神经网络 [[DNN]]

  • [[BNN]]

[[Optimization]]

卷积神经网络 [[CNN]]

  • [[TCN]]

  • [[CNN 卷积核]]

  • [[Pooling]]

    • [[为什么CNN需要 pooling操作?]]

图神经网络

[[Transformer]]

词向量 [[Word Embedding]]

[[CTR]]

[[集成学习]]

[[CV]]

  • linear probe

[[GAN]]

  • [[IRGAN]] 分类器生成文档序列,判别器去判别

[[评估指标]]

训练

  • 数据并行、模型并行

  • 同步训练、异步训练

  • Parameter Server架构、Ring allreduce架构

优化

  • [[Tensorflow 模型量化]]

  • 联邦学习

  • [[模型蒸馏]]

  • 数据集相关 [[Data]]

[[机器学习参考]]


机器学习中的数学

[[PRML]] 贝叶斯视角

[[The Elements of Statistical Learning]] 统计角度,ensemble 和 decision tree

Probabilistic Machine Learning: An Introduction


机器学习模型设计五要素

{x,y}

  • 根据业务特点提取数据

f(x)

  • 参数量

    • 通过[[VC维]]衡量模型复杂度
  • 结构,都有自己的 [[inductive bias]]

    • [[Linear Regression]] 学习线性特征,特征工程提高非线性能力

    • [[MLR]] 每个分片拥有自己的参数

    • [[FM]] 自动做特征交叉

objective

  • 产品的 KPI 转换成模型的损失函数

  • P(model|data) = P(data|model) * P(model)/P(data) —> log(d|m) + log(m)

[[Optimization]]

  • 达尔文式

    • 启发式算法,仿达尔文进化论,通过适应度函数进行“物竞天择,适者生存”式优化

      • 比较有代表性的:遗传算法GA,粒子群算法PSO,蚁群算法AA;

      • 适合解决复杂,指数规模,高维度,大空间等特征问题,如物流路经问题;问题是比较收敛慢,工业界很少用。

  • 拉马克式

    • 拉马克进化论,获得性遗传,直接修改基因(w);

    • 比较有代表性的分两类:

      • sgd variants(sgd/Nesterov/Adagrad/RMSprop/Adam/…)

      • newton variants(newton/lbfgs/…)

evaluation

  • 一个好的模型需要覆盖的层面

    • 算法层面:准确率,覆盖率,auc,logloss…

    • 公司层面:revenue,ctr,cvr…

    • 用户层面:用户体验,满意度,惊喜度…

模型调优思路

  • 模型效果 ∝ 数据信息量 x 算法信息利用率

    • 扩充“信息量”,用户画像和物品画像要做好,把图片/文本这类不好量化处理的数据利用起来;

    • 改进f(x)提高“信息利用率”,挖到之前挖不到的规律;


杀戮尖塔

碎心

路线选择

  • 一层

    • 除了观者,别的角色多走小怪,适当走?

    • 没把握少打精英,最好选择火堆数量较多的路线,卡组强化或者火堆回