我们是怎么样定义自己的

           我是谁?我从哪里来?我为什么会走到这里?我会去到哪里,是什么让我走向那里?我将与谁相遇?我愿和谁同行?

—— 寻沂

           最近一段时间胃又开始不舒服起来了,昨天夜里坐在桌子前面感受自己的身体状态突然开始问自己:“我是谁,痛的是我吗?为什么身体会弄成现在这副样子,为什么身体弄成这副样子的时候,我还不改变一下自己的生活状态?饮食不规律、睡眠不规律。”

           当我问出我是谁的时候。我突然发现,我自己也不知道自己是谁。我对于自己的期待、要求和定义是不稳定的。不同时期的想法截然不同。我像流动的水,在嘈杂和拥挤之中不断流动,没有固定的形状。

           我把记忆往前推到推到20年前,然后重新看一遍自己的变化,看一看我到底经历了什么?我怎么样成长,怎么样改变,怎么样被塑造成了现在的这个样子?

我是怎么样定义自己,怎么样描述自己的?那些描述里面有什么样的认知和期待?那么,我试图来描述一下自己:

我叫xxx,企业微信名字叫xxx。我在xxxx上班,是一名推荐算法工程师。我来自一个偏僻的小山村,名字叫做xx。我的父母是农民,他们没什么文化,辛辛苦苦把我和我姐姐拉扯大。我从来没想过,我有一天可以走出大山,走到现在这种地步。我为自己的现状感到自豪,又有点不满。自豪的原因是我似乎确实还算优秀,不满的原因是,我当前并没有感觉到太多的快乐。

于我而言,生活是疲惫的也会一直疲惫和劳累下去。我非常想要改变自己的生活,改变自己的未来。可是不知道从何处着手。我渴望亲密关系,但是又害怕在亲密关系里受到伤害。我其实不是很在意别人的看法,但是我真的很期待有一段足够稳定、健康、相互理解、相互支撑的关系。

这真的很困难,我有点疲惫了。我不知道还有多少力量能够往前走下去。

我真的好累。

根据上面的描述,我试图分析一下我自己。

  • 我首先介绍了我的名字,然后是企业微信名和工作。说明工作于我而言非常重要。
  • 第二个部分我介绍了我的家乡和父母,并且对家乡和父母的评价都很低。我对自己的出身和过相当不自信。

  • 第三个部分,我说父母辛苦把我和姐姐拉扯大。说明我对自己的出生,或者是父母并无多大抱怨。因为出生实在没有办法责怪,也不应该责怪。
  • 第四个部分,是对于我自身的评价,我觉得自豪又不满。这是一种矛盾的心态,这两种都来源于外部评价和自我认知双重的作用。自豪的外部评价,来世俗对工作的定义;内部评价来自于我一方面需要外部认可,另外一方面我对于改变自身命运的赞同。不满来自于,我没有办法接纳自己,没有办法接纳不被社会完美评价的自己,不接受有缺陷的自己;无法在有缺陷的现状里得到慰藉、寻找快乐、获得满足。
  • 第五部分,是我对自身现状的评价。以及我对生活的期待。我很疲惫并且希望改变,以及毫无方向的手足措的感觉。
  • 第六部分,写了我对生活的期待,以及未能完成这些期待的原因。
  • 第七部分,我写了我对生活的态度。我很累。

我是不是可以改变一下,我的自我描述。

我是一个追求自由和快乐的斜杠青年。我的主业是一名推荐算法工程,供职于国内最大的互联网公司之一。这里能够给我提供很好的指导和上升空间,给了我一个很好的学习平台。

我致力于用最优秀的技术将给每一个物品找到合适的地方;用最热情的分享帮助每一个在困顿中迷茫的人;用最人性化的沟通方式帮助身边每一个人找到适合自己的生活方式。

我热爱心理学,我认为只有通过了解自身才能够很好的完成人生这趟旅途。我相信每个人都有属于自己独一无二的路和使命。

我在成为一名倾听师的道路上。我会成为世界上最优秀的心理咨询师和心理康复师。

我来来自于一个有爱的家庭,那里有着丰盈的爱和关照。我们每个人都爱和包容着彼此;为了彼此和一起的幸福生活而努力。我的母亲非常贤惠,对我有着非常多的关照,对我的童年起到了很大的影响。我的父亲经常鼓励我追寻更加独立的生活。

我热爱分享也乐于探索新的事物,我对亲密关系充满期待;并且热情洋溢地准备好开始一段稳固而充满活力的亲密关系。

我对成功有属于自己的理解: 充足的物质基础,健康的身体状态,轻快的自由的心灵,有爱和相互信任依托的人际关系。这是我一生的努力和追求。

在这个自我描述里面,我过着完全不一样的人生。当我写下这段话的时候,我感受到的是另外一完全不同的我。我到底要将自己描述成什么样子,要固化成什么样子? 我的内心到底对这个世界是怎么样思考的?我会和谁相遇和谁交互,又会和谁一起同行?

我觉得我是可以选择的。


最近,一切似乎都在坍塌。

我不再觉得我是我。那个正在思考着“我”是“谁”的“我”。这里面到底是谁在思考,谁在发问,谁在迷茫?又是谁在感叹? 我在思议的是谁,还是有谁在思议我?在这一句话里面的两个“我”和一个“谁”到底如何区分?

那些力量、那些悲伤、那些沮丧到底来自于哪里?当我在饮水的时候,是我需要“饮水”,还是“饮水”需要我,或者又是谁需要我替他饮水?所有的行为模式,所有的思维习惯背后到底是什么在驱驶他们前进呢?

我为什么会痛苦?为什么需要表达?为什么需要亲密关系?哪些东西需要理由,哪些东西不需要理由?哪些地方可以用言语描述。那些地方不可以用言语描述? 在言语描述不到的地方我又该做何处理?

那道门在哪里?

接纳不完美的自己读书笔记

第一章

  • 什么是固化思维的困局?
  • 怎么样发现固化思维的困局?找到阻碍我进步的思维方式?
  • 目标是:走出思维困境,变得更加平和、愉悦、生活也会更加自由而从容。
  • 专注于做决定时产生的误区是什么?

  • 思维和行为变得独一无二的技巧和方案进行整合?根据特定量身定制方案。
  • 变得更加轻松、生活向好的方向转轨,获得足够的心理能量来消除日常焦虑。
  • 有勇气迎接更有意义的人生挑战。

问题: 人的固定思维里面有一些困局,这本书的目的就是找到个人思维的困局,找到阻碍我们进步的思维方式。

方法: 针对性的提出技巧和方案,来改变这些思维困局。

目的: 让我们的生活更加轻松并且有意义。

  1. 人真的有思维困局嘛?这些思维困局会对人产生什么样子的影响? 哪些困局是可以改变的,哪些困局真的永远无法改变?有无法改变的困局嘛?
  2. 这些方法真的是有用的嘛? 这些方法最终会导向哪里?怎么样判定一个人是不是真正的幸福? 怎么判定这些方法对自己幸福感的提升是有效的? 怎么样通向幸福之门?
  3. 怎么样达到自身目的呢? 我的目的又是什么呢? 人的幸福到底是什么?怎么样才会使生活过得幸福又有意义。

问题:阻碍人通往幸福的东西是什么? 真的是思维困局嘛? 什么是思维困局?

方法: 用什么样的方法能够使人解决思维带来的困局通往想要去的地方?

目的:通往幸福,轻松,勇敢更有力量的道路。


五部分:

  • 自我认识
  • 基本技巧
  • 思维纠偏
  • 亲密关系
  • 工作与财富

核心概念:自我厌弃

什么是自我厌弃

作者提出了一个新的概念,他认为自我厌弃是问题的根源。

通过一些技巧的改善,作者认为能够在某些方面快速达到以下的几个效果:

  • 避免生活上的压力
  • 发现自身思维当中的局限性
  • 迅速地把自己纠正过来

经过有意识的思考,我们会发现事情其实和我们下意识认为的并不一样;我们需要花一些时间思考并且解构这些任务。就能够快速找到解决方案。


从源头上避免自我厌弃,有条理的面对这些思维模式,而不是不断地陷入苛责和自我反思当中。

自我厌弃的源头是什么

什么导致了我们对于亲密关系的消极态度?

阳极 阴极
严格遵守规范,哪怕是强加于自己的 生活中有太多杂事,毫无条例和章法
过于坚持 太容易放弃
想的太多行事犹豫不决 行动莽撞冲突,欠缺思考
  • 自我厌弃具备两极性,两种不同类型的极端自我厌弃成对出现。
  • 自我厌弃具备多样性,各种不同类型的自我厌弃千奇百怪

提供一个简单的方法来解决自我厌弃

观点和技巧来源于: 主流认知行为主义流派的相关理论和研究

目的: 让思想和行为调整到最为积极的状态

什么是思想和行为最为积极的状态?

认知和行为 这两个词都非常重要,因为行为的改变是让认知改变最快的方式。

健康的心灵基于健康的行为

为了整合自己的思维方式,我们需要规制自己的行为,即便是细微的选择上也要留意,这样才能改善自己潜意识中的坏习惯。


目的: 并不是消除自我厌弃,而是消除哪些对身体健康、幸福感、以及亲密关系有害的模式。

会指出哪些行为需要减到最少,哪些行为留着也无妨。

优先找出对我有影响的自我厌弃行为,而不是消除自我厌弃行为的数量和频次。

总体来看这本书的目的是为让帮助读者过上更幸福的生活,作者认为阻碍人变得更轻松的是人的思维模式的困局。如果能够打破这些困局,那么人将会变得更幸福。本书中把人的思维困局命名为自我厌弃,主要提供了一些技巧来帮助读者发现并且解决那些对人体有伤害的自我厌弃行为。


第一个小技巧:设定目标

我们在克服自我厌弃的过程中,会受到自我厌弃的阻碍,不分主次,想要一次性将所有的问题都解决掉是阻碍之一。

所以,我们需要设定目标

几种指定目标的方法:

  • 改善自身5中自我厌弃的模式
  • 只对某个特定部分的自我厌弃做改善。比如亲密关系领域。
  • 想要对总体作出改善,主要在五个维度上作出改善分别是: 总体以及自我调节,组织,亲密关系、工作以及金钱。

我的目标是(三个模式改变):

  • 改变自己的饮食习惯和身体素质,将体重降低到155斤。

  • 改变对于答辩的态度,认真地通过此次答辩,完美升到9级。
  • 完成第一阶段心理倾听师的课程,让自己能够更广泛地共情。

  • 模式的重复: 相同的问题以不同的形式出现,要理解一种行为模式是非常困难的。 在你针对一种行为模式能够举出10个例子之前,你很难说你真正地了解一种行为模式。

也就是哪怕是同一种自我厌弃,或者是思维模式背后,可能会有很多种不同的行为表现。这些行为表现会在日常生活中以不同的形式出现。我们需要不断地去处理这些表现出来的问题形式,从而认识这样的行为模式。


正向思考,并且有信心

当不同行为发生的时候,我们会习惯性地产生自我厌弃。可是自我厌弃带来的羞愧感和自我批评并不产生作用。

如果你只关心自己的错误,这本身就是一种自我厌弃的模式。这种自我厌弃的模式会剥夺你改变自己的信心以及自制力。

迷失在自我厌弃的情绪当中无法自拔,会让我们丧失力量。

让我们感觉糟糕的几种原因:

(1) 陷入了自我批评

(2) 对自己有不切实际的高预估

(3) 将潜在问题方案想的过于复杂

(4) 以上三种的结合。

测试:

  1. 找到自我厌弃最严重的领域?
    • 亲密关系上我觉得自己不适合爱一个人,也不值得被爱。
    • 外形管理上,我觉得自己太丑、太胖了。
  2. 找到这些领域自己作出的改变?
    • 杨阳、miranda他们和我的关系都还好
    • 读书会的大伙也很认可我
    • 惠珊一眼就看中了我
    • 我努力在学习心理学知识,改变自己的行为
    • 我尝试画画改变自己的脑子
    • 我给文园带了东西,她一直想要请我吃饭
    • 我和组里其他同事的关系都还好
    • 我又在控制自己的饮食
    • 正在努力把自己变瘦并且已经取得了一些效果。

有了这些领域的改变,就会觉得自己并非什么也没做。


相信自己有能力改掉这些坏习惯

可能面对的问题:

  • 有简有繁,需要我们面对不同的情况,人性是复杂的
  • 需要面对不确定性和灰色地带,对不确定性和灰色地带的容忍度较低会导致自我厌弃。
  • 积极处理阅读中出现的不确定感,而不是放弃改变是你从自我厌弃的枷锁中解放出来的关键一步。

将会带来的改变:

  • 通过实践,发现自我厌弃的习惯,从源头避免自我厌弃。
  • 更有自信,相信自己能够找到创造性解决方案。
  • 实践会让策略更多,并且更能够找到更好的优化策略

  • 实践技巧的迁移,能够将这些实践技巧迁移到其他场景。
  • 角色发生转变,成为处理自我厌弃的专家。

准备一场自我测试

不需要掌握每一个知识点,只需要掌握目前对你来说最重要的部分。

不是每个测试都需要参与,只需要掌握”当下”最重要的问题。

小技巧:

  • 找一个地方记录所有思维测试的答案,可以是任何形式
    • 记录可能带来更多的顿悟空间
  • 如果测试感到困难,要稍微动下脑筋,实在不行也可以继续往下阅读,知道可以应付测试为止。
  • 思维测试应该基于第一反应,如果有多种只需要选择一种就好了。

将书中理念应用于生活当中的重要性

  • 心理学理论尚且年轻
  • 研究一般集中在”平均水平”的被试,领域和对象不被清晰定义。新的研究可能颠覆原有研究。
  • 测试作为自我实验的开端,将理论与实践相结合。

ABAB实验:

在干预量和实际量之间,使用ABAB进行实验。


准备好开始了嘛?

  • 你是否对本书确定了清晰的目标?是否有足够的精力来完成这些目标?

有清晰的目标:

  1. 减肥,让自己的生活方式更加健康。
  2. 突破技术瓶颈,成功晋升,破除晋升恐惧
  3. 完成心理倾听师第一阶段,完成自我探索和修通进入第二阶段。能够进入到一段亲密关系,培养共情能力
  • 你是否准备了纸和笔来记录自己的想法?是否准备了记好和便利贴来标记自己需要回看的部分?

准备好在GitHub笔记里面记录自己的想法,并且分享到知乎、CSDN、微信公众号上面。

需要会看的部分暂时没有准备好需要标记,我没有部分回看的习惯;这部分的重要性暂时没有体会到。

我会将重要的部分章节用书签标记下来。

  • 能鉴别出需要记忆的点嘛?
  1. 无法成长、无法变得更加幸福来自于固定的思维模式——自我厌弃是导致自我禁锢的思维模式。
  2. 我们可以通过简单的技巧来改变这种思维模式,也可能需要不断的反复来调整自己的思维模式,同样的思维模式可能会在生活中以不同的形式出现。
  3. 我们需要学会记录,来记录自己的改变,记录自己的思维;记录会让我们思考更有空间,也会让我看见自己的改变从而变得更加有信心。
  4. 要学会接受生活中的不确定性以及灰色地带,对确定性的追求和对完美主义是自我厌弃的一种。
  5. 要保持正向思维思考,不要只关心自己的错误;要相信自己有能力改掉坏习惯。
  6. 不要试图消灭所有的自我厌弃,只要关注对当下最重要的,对自身生活有伤害的自我厌弃即可。
  7. 要设定目标。
  8. 行为和认知同样重要,行为是改变认知最快的方式。
  9. 对自我厌弃模式的改善是为了让自己的行为和认知都调整到最积极的状态。
  10. 让我们感觉到糟糕的原因有四种:
    1. 陷入自我批评
    2. 对自己有不切实际的高估
    3. 将问题的潜在解决方案想的过于复杂
    4. 以上三种的结合体

核心关键点:

目标记录行动信念

  • 要有改善的目标
  • 要积极的行动
  • 要记录行动的过程
  • 要始终保持信念

第二章

重新审视哪些让我讨厌的特质

阳极 阴极
盲目乐观,只关注事物的潜在优势,而不注意潜在问题 一味悲观,对任何积极的想法持怀疑态度,为一点小事忧心忡忡,面对许多潜在的机遇望而却步
消极怠工 过度操劳
不在乎他人的想法,不管自己是否影响到了别人。 过于关注他人的想法。
容易妄自尊大,功劳都属于自己。 常常怀疑自己,不觉得自己能干成事
不愿意表达自己的需求,只求避免冲突的发生 不停的挑起事端
认为学历这种东西没什么用 觉得自己学历太低,会不被大家认可
觉得不可能被爱,觉得自己不值得被爱 渴望被爱,渴望被关注
想要有好的外貌,喜欢漂亮的女孩子 讨厌外貌协会,讨厌通过外在形象来获得认可,觉得需要看到每个人的内在,不要标签化

我只有这些特质令我讨厌嘛?

这些讨厌的特质能够覆盖我对自己所有的厌弃嘛?

显然是不能的,我没有办法描述所有的厌弃;另外就是对其他事物的厌弃是对自我的厌弃的另外一种表现吗?

比如:我讨厌答辩,实际上我讨厌在人面前将技术,讨厌拔高。我讨厌那个没有办法面对答辩的自己,我讨厌失败。我讨厌去处理那些看起来很困难的东西。

我觉得是我的学历不够,我不能搞定这些东西。我讨厌学历低的自己。


为什么讨厌会呈现两极分化

  • 了解自我厌弃的两端,能够让我们知道自我厌弃产生的原因,来自于害怕,从而让我们清楚的面对这些担忧。

真的有必要了解一对范式的两端嘛?

驱使人走向极端行为的原因就是以为害怕,即使不那么偏激最终也走向会走向一个极端。

比如因为害怕消极怠工,所以走向过度操劳。清楚了解对立面,可以帮助你直面这些担忧。

我们总是试着不去想那些我们害怕的事情。结果,可能导致我们与那些害怕的事情的思维模式背道而驰,反而走向另外一个极端。当一个人在短时间内突然走向另外一个极端也是因为极端行为本身导致的。

  • 了解自我厌弃的两端,能够让我们更好地理解他人。

自我两端的例子

  • 觉得自己学历太低,不会被人认可 VS 觉得学历没什么用
    • 觉得自己学历太低,会让自己没有自信。将那些不成功的地方都归结为学历,不敢去尝试新的东西和困难的东西。总是觉得自己不被认可。自己不被认可的原因是因为学历低,就算做任何事情也不会得到认可。
    • 觉得学历没什么用,不断想要找到别的评价方式,对高学历嗤之以鼻;会有一些抵触的感觉。对困难的事情觉得是掉书袋,觉得尝试具备技术难度的事情是自我感动。不断想要跳出世俗的评价体系。
  • 渴望被爱,渴望被关注 VS 觉得自己不值得被爱
    • 渴望被爱,渴望被关注。想要让自己成为世界的中心,希望别人夸赞自己,表扬自己无时无刻地把自己作为团队的中心,家庭的中心。希望别人注意到自己,关注自己的感受。希望别人夸赞表扬自己。
    • 觉得自己不值得被爱。当别人认可自己的时候,认为那是虚假的。当别人爱上自己的时候,觉得那个人很下贱,不值得我去珍惜,是瞎了狗眼。当团队中有人认可自己的时候,觉得是在利用自己,是在虚假奉承。

接下来找一个折中的方法

  1. 找到生活中一个典型的场景,阐述这种模式带来的影响。
  2. 问自己两个问题:
    1. 如果思维模式和自己相反的人会怎么做?
    2. 在这种模式下介意两者之间的人又会怎么做?
  • 注意事项
    • 折中的路径不一定是最好的选择
    • 基于你所处的场景,充分考虑当下人际关系给出的线索,以及问题持续的时间、行为将会导致的后果,进而选择最适合的行为与方式。

渴望被爱,渴望被关注:

  • 我总是希望在工作中别人认为我是重要的。我希望和每个人建立好的、亲密的关系。我希望能够和sunny成为朋友。我希望和miranda成为朋友,我希望可以和所有的人有很好的关系,我害怕跟人关系闹僵。
  • 我会主动去问sunny是不是要邀请我参加生日会,也不管那是不是合理。我会问她为什么不邀请我喝酒。
  • 希望和所有人达成统一战线,左右逢缘。
  • 如果别人和我产生冲突,我会觉得不快乐。会觉得自己被冒犯了,我会很难受。我害怕矛盾和冲突。
  • 我希望老板能够关注我的感受,爽老师能够来跟我沟通。我想要能够和大家一起讨论技术问题,我希望能够得到更多分享的机会,将我的想法讲给大家听。
  • 一旦跟人沟通我就会亢奋,我的心情会变得激动起来。我的脑袋会变得不清晰,我没有办法清晰地回到平静的状态。
  • 我渴望在工作中得到更多的认可和展示的机会。

觉得自己不值得被爱

  • 老板关注我,或者是问我问题的时候我会害怕。
  • 我太过于循规蹈矩的遵守职级体系
  • 当别人靠近我的时候我会小心翼翼
  • 当别人有问题请教我的时候,我会觉得他很垃圾。
  • 我会努力去讨好其他人,去让产品、身边的人、开发更舒心一点儿。
  • 我会觉得别人靠近我是因为我的工作。我觉得自己一无是处,除了工作好一些。
  • 我觉得我能找到现在这份工作完全是幸运。
  • 和家里人沟通会不耐烦

一个折中的办法

  • 在有的人生命里面是重要的就可以,其他的人的感受可以不需要关注,或者是较少地关注;和某些与自己性情想和的人成为朋友即可。
  • 对那些你真正认可的人,你想要靠近的人投以善意;对那些你想要回应的人积极回应。
  • 积极去表现自己,不一定需要得到所有人的关注,但是可以展现自己;肯定自己。
  • 平静的和别人沟通,把每次沟通都当成普通对话;也不要不耐烦也不要过度亢奋。
  • 发自内心的对想要照顾的人好,对自己不想要照顾的人,任由他们去。
  • 在自己认为可以让自己表现,也应该表现得地方不要怯懦,也不需要着急表现自己。

了解天性的力量

人类所有的行为都具有积极的一面。

当你找到自己风格所产生的力量,在某些处境下即使结果并不是最理想的,你产生的防御感也不会那么强烈。而防御感和羞愧感的减弱,又确实有助于你在特定情形下做最明智的选择。

  1. 不同的风格可能适用于不同的场景
    • 比如,乐于打破规矩的人在规则制度本身存在问题的情况下,相较于循规蹈矩的人更容易取得工作上的成就
  2. 遵循自己的风格能够让自己的防御感和羞愧感减弱,防御感和羞愧感减弱会有助于我做明智的选择。
    • 比如,渴望被关注的人在一个相对来说自己比较优秀的环境里面防御感和羞愧感会更弱,从而自己会更自如。

事实上在很多情况下积极期望和适度焦虑组合起来,都是最佳的思维模式

充满希望而又带一点点焦虑的人,处于“乐观主义”和“悲观主义“的中立地带。他们能够将期待和谨慎的优势进行融合。


带来曙光的策略

DIN Attention的代码解析

代码

print("[INFO] build mlp module")
#queries [B, D]
queries = input_layer[0]
#keys/facts shape=[B, sequence_length, embedding_size]
keys = input_layer[1]



# get dimension of query
queries_hidden_units = queries.get_shape().as_list()[-1]
# tile queries for sequence length, [B, queries_D] -> [B, queries_D * sequence_length]

print("tf.shape(keys):", keys.get_shape())
print("tf.shape(queries):", queries.get_shape())
queries = tf.tile(queries, [1, tf.shape(keys)[1]])
# [B, sequence_length, embedding_size]

# query and fact are of the same dimension
queries = tf.reshape(queries,
                     [-1, tf.shape(keys)[1], queries_hidden_units])


if len(input_layer) == 3:
  timegap = input_layer[2]  # [B, sequence_length, d]
  din_all = tf.concat([queries, keys, queries - keys, queries * keys, timegap],
                      axis=-1)
else:
  din_all = tf.concat([queries, keys, queries - keys, queries * keys],
                      axis=-1)
  print("din attention mlp input shape: ", din_all.get_shape())
  # units = 80,  输出的维度大小,改变inputs的最后一维
  # 即在 [B, sequence_length, concat_embedding] 的最后一维度 变成 80
  # mlp:[80, 40, 1]
  d_layer_1_all = tf.layers.dense(din_all,
                                  80,
                                  activation=tf.nn.sigmoid,
                                  name="{0}_f1_att".format(self.name),
                                  reuse=tf.AUTO_REUSE)
  d_layer_2_all = tf.layers.dense(
    d_layer_1_all,
    40,
    activation=tf.nn.sigmoid,
    name="{0}_f2_att".format(self.name),
    reuse=tf.AUTO_REUSE,
  )
  d_layer_3_all = tf.layers.dense(d_layer_2_all,
                                  1,
                                  activation=None,
                                  name="{0}_f3_att".format(self.name),
                                  reuse=tf.AUTO_REUSE)
  d_layer_3_all = tf.reshape(d_layer_3_all, [-1, 1, tf.shape(keys)[1]])
  outputs = d_layer_3_all
  # Mask

  key_masks = tf.sequence_mask(
    #lenghths = [B,B,B,B,B,B,B...B]
    # maxlen = T, 控制最大长度
    tf.ones(
      shape=tf.shape(keys)[0],
      dtype=tf.int32) * tf.shape(keys)[1], tf.shape(keys)[1])  # [B, T]
  # [B, 1, T] all true
  key_masks = tf.expand_dims(key_masks, 1)  # [B, 1, T]
  paddings = tf.ones_like(outputs) * (-(2**32) + 1)
  outputs = tf.where(key_masks, outputs, paddings)  # [B, 1, T]

  # Scale
  outputs = outputs / (keys.get_shape().as_list()[-1]**0.5)

  # Activation
  outputs = tf.nn.softmax(outputs)  # [B, 1, T]

  # Weighted sum
  # [B, 1, T] * [B, T, D]
  output = tf.matmul(outputs, keys)  # [B, 1, D]
  # tf.squeeze 与 tf.expand_dims互为逆操作
  output = tf.squeeze(output, [1])

  return output

输入部分

  • Keys: 表示待查询的key,其结构为[B, Sequence_length, Embedding_size]
    • B: 表示Batch Size的大小
    • Sequence_length: 表示序列的长度
    • Embedding_size:表示序列嵌入的大小
  • Query: 表示查询的Qurey,在DIN中表示Target Item的Embedding。其结构为[B, Sequence_length, D]
    • B: 表示Batch Size的大小。
    • Sequence_length:表示序列的长度。
    • D: 表示Query序列的Embedding长度。

这里先不考虑Time Gap的操作。

操作部分

  • tf.tile(queries, [1, tf.shape(keys)[1]):

这里执行了一个tile操作, 我们来看一下tile操作的功能是什么。

这里假设Batch Size = 3 sequence_length = 5 embedding_size = 4 Queries_D = 6

import tensorflow as tf
a = [[[1.0, 2.0, 3.0, 4.0],
     [1.0, 2.0, 3.0, 4.0],
     [1.0, 2.0, 3.0, 4.0],
     [1.0, 2.0, 3.0, 4.0],
     [1.0, 2.0, 3.0, 4.0]], [[1.0, 2.0, 3.0, 4.0],
     [1.0, 2.0, 3.0, 4.0],
     [1.0, 2.0, 3.0, 4.0],
     [1.0, 2.0, 3.0, 4.0],
     [1.0, 2.0, 3.0, 4.0]], [[1.0, 2.0, 3.0, 4.0],
     [1.0, 2.0, 3.0, 4.0],
     [1.0, 2.0, 3.0, 4.0],
     [1.0, 2.0, 3.0, 4.0],
     [1.0, 2.0, 3.0, 4.0]]]

b = [[1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
     [1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
     [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]]
keys = tf.convert_to_tensor(a)
queries = tf.convert_to_tensor(b)

queries_hidden_units = queries.get_shape().as_list()[-1] #获取embedding size
print(tf.shape(keys)[1])
print(queries)
queries = tf.tile(queries, [1,tf.shape(keys)[1]]) # 在第一维上不扩增,在第二维度上扩增embedding size的大小

结果输出如下:

tf.Tensor(5, shape=(), dtype=int32)
tf.Tensor(
[[1. 2. 3. 4. 5. 6.]
 [1. 2. 3. 4. 5. 6.]
 [1. 2. 3. 4. 5. 6.]], shape=(3, 6), dtype=float32)
tf.Tensor(
[[1. 2. 3. 4. 5. 6. 1. 2. 3. 4. 5. 6. 1. 2. 3. 4. 5. 6. 1. 2. 3. 4. 5. 6.
  1. 2. 3. 4. 5. 6.]
 [1. 2. 3. 4. 5. 6. 1. 2. 3. 4. 5. 6. 1. 2. 3. 4. 5. 6. 1. 2. 3. 4. 5. 6.
  1. 2. 3. 4. 5. 6.]
 [1. 2. 3. 4. 5. 6. 1. 2. 3. 4. 5. 6. 1. 2. 3. 4. 5. 6. 1. 2. 3. 4. 5. 6.
  1. 2. 3. 4. 5. 6.]], shape=(3, 30), dtype=float32)
  • 将Queries 转换成[B, Sequence_length, queries_D]的大小
queries = tf.reshape(queries,
                             [-1, tf.shape(keys)[1], queries_hidden_units])
print(queries)
tf.Tensor(
[[[1. 2. 3. 4. 5. 6.]
  [1. 2. 3. 4. 5. 6.]
  [1. 2. 3. 4. 5. 6.]
  [1. 2. 3. 4. 5. 6.]
  [1. 2. 3. 4. 5. 6.]]

 [[1. 2. 3. 4. 5. 6.]
  [1. 2. 3. 4. 5. 6.]
  [1. 2. 3. 4. 5. 6.]
  [1. 2. 3. 4. 5. 6.]
  [1. 2. 3. 4. 5. 6.]]

 [[1. 2. 3. 4. 5. 6.]
  [1. 2. 3. 4. 5. 6.]
  [1. 2. 3. 4. 5. 6.]
  [1. 2. 3. 4. 5. 6.]
  [1. 2. 3. 4. 5. 6.]]], shape=(3, 5, 6), dtype=float32)
DSSM模型上的迭代工作

INFO-NCE Loss迭代

为了解决负样本选择的问题引入了INFO-NCE的概念。在INFO的计算方式上主要参考[1]中INFO-NCE的计算方式,对应的计算方式如下。

\[\mathcal{L}_{ssl}^{user}=\sum_{}\]

[1] Self-supervised Graph Learning for Recommendation

#通用的逻辑 slotflat = true need_hash=true hash_func=Kge_Bkdr_Hash

常用评估指标的原理和计算方式

记录一次数据下跌的排查

负采样的相关调研

[1] Cross-Batch Negative Sampling for Training Two-Tower Recommenders [2] Negative Sampling for Recommendation [3] DSSMFM: Combining user and item feature interactions for recommendation systems [4] Overview Negative Sampling on Recommendation Systems [5] Negative-Sampling-Paper [6] 推荐系统遇到曝光偏差怎么办?用对比学习! [7] 文献阅读:Mixed Negative Sampling for Learning Two-tower Neural Networks in Recommendations [8] Rethinking InfoNCE: How Many Negative Samples Do You Need? Silde Feature Sample

负采样相关的内容