diff --git a/2024/01/01/leetcode/index.html b/2024/01/01/leetcode/index.html index b9ec019..dccc481 100644 --- a/2024/01/01/leetcode/index.html +++ b/2024/01/01/leetcode/index.html @@ -16,19 +16,21 @@ - + - + + - + + @@ -209,7 +211,7 @@
@@ -220,7 +222,7 @@ - 1 mins + 24 mins @@ -263,8 +265,63 @@vector的长度:
+for循环:
+链接:https://leetcode.cn/problems/binary-search/description/
+给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target +,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 +-1。
+示例 1:
+1 |
|
示例 2:
+1 |
|
题目表示的是有序数组,而且题目没有重复元素。在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则
+1 |
|
注意这里给出的题解法:当
+left <= right
的时候,以下的条件中全部都不取到等号
+nums[middle] > target nums[middle] < target
需要注意的是:right=nums.size()-1
C++版本
+1 |
|
Go版本
+1 |
|
https://leetcode.cn/problems/remove-element/description/
+示例 1:
+1 |
|
示例 2:
+1 |
|
双指针法(快慢指针法): +通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
+定义快慢指针
+C++版本
+1 |
|
python版本
+1 |
|
GO版本:
+1 |
|
深度推荐系统 王喆
+https://zhuanlan.zhihu.com/p/407871839
+搜索引擎需要用户主动输入自己的意图,有些需求、意愿,是用户自己都意识不到的。将自己拥有的、用户可能喜欢的内容主动展示给用户,从而留住用户花费更多的时间与金钱。这就是推荐系统。
+关键词:
+推荐、广告、搜索
+用户需求表达方式:推荐、搜索
+信息服务对象:推搜、广告
+相同点:
+推荐&搜索 \[ +F_{search}(t|q,u)\\ +F_{recommend}(t|u) +\] +q表示物料对用户查询的匹配程度,搜索有显式的匹配程度,但是推荐没有
+搜索:查询语句与物料信息交叉
+推荐:用户信息与物料信息交叉
+推搜&广告
+最终目标性:(优化指标)
经典算法
-基本思想:根据用户之前的喜好以及其他兴趣相近的用户的选择来给用户推荐物品
-分类:
+实现流程:
召回:根据喜好标签进行选择
+排序:根据召回的视频进行排序
+ +根据用户行为进行同步更新
+推荐系统功能
杰卡德相似性系数
-衡量两个集合的相似度一种指标。 -两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数
余弦相似度
-用户向量i和j之间的向量夹角的大小, 夹角越小, 说明相似度越大, -两个用户越相似
-1 |
|
皮尔逊相关系数
-相比余弦相似度, -皮尔逊相关系数通过使用用户平均分对个独立评分进行修正, -减少了用户评分偏置的影响(每个向量先进行处理,减去了向量之间的均值)
-1 |
|
存在的问题是数据量太大且时间开销太大无法满足实时要求
+召回
+精排
+粗排
+重排
+存在的问题:
+Lambda架构
+ + +离线层
+近线层
+在线层
+必要性:
+物料特征
+用户特征
+交叉特征
+偏差特征
+无法做到绝对公平,没点击不代表不喜欢,点击的未必喜欢,偏差Bias
+Above +Click:只有在点击物料上方的未点击的物料才被当作负样本,没被点击的且不在点击上方的就不放进训练的集合中
处理缺失值
+标准化数据
+数据平滑与消偏
目标:克服小样本的负面影响,提高计算结果的置信区间
+\[ -\mathrm{R}_{\mathrm{u}, \mathrm{p}}=\frac{\sum_{\mathrm{s} \in -\mathrm{S}}\left(\mathrm{w}_{\mathrm{u}, \mathrm{s}} \cdot -\mathrm{R}_{\mathrm{s}, \mathrm{p}}\right)}{\sum_{\mathrm{s} \in -\mathrm{S}} \mathrm{w}_{\mathrm{u}, \mathrm{s}}} -\]
- 权重 \(w_{u,s}\)是用户\(u\)和用户\(s\)的相似度,\(R_{s,p}\) 是用户\(s\)对物品\(p\)的评分
+分桶离散化
+推荐系统的特征空间:高维、稀疏
+增强类别特征表达
类别特征的高维性
+类别特征的稀疏
+特征如何表征
+建立字符串到数字的映射表,缺点在于需要更新维护且对于大规模而言比较难以负担
+采用特征哈希Feature Hashing
对于推荐系统而言:记忆+拓展
+记忆能够处理80%的需求,但是个性化太弱(评分)
+拓展将细粒度变成粗粒度,借助深度学习的Embedding
+共享Embedding
+独占Embedding
+不同的任务使用不同的Embedding的方法
如果在特征交叉的时候使用的是共享Embedding,会产生相互干扰的情况(不同需求要求不同Embedding)
FFM:每个特征在与不同特征交叉的时候,根据对方特征所属的Field要使用不同的Embedding
CAN:既要使用不同的Embedding进行特征交叉,但是又不想要太多的参数导致训练的难度增加
+传统利用Hadoop/Spark的分布式训练方法忽略了高维稀疏特征空间 +直接让master处理会参数量很大
+使用PS架构的好处:
+ + +一个Server只负责处理海量参数中的一部分
+同步并发
+ +异步并发
+无须等待,不存在短板效应,有明显的速度优势
+梯度失效的问题:
+半同步半异步
+允许Worker节点在一定迭代轮数中保持异步,但是如果最快节点和最慢节点的迭代步数之差已经超过了允许的最大值,那么所有的参数都需要停下来进行一次参数的同步
+传统方法:FTRL
+FM:引入了二阶特征交叉(手动二阶特征交叉)
+Wide&Deep:兼顾记忆与扩展
+DeepFM :融合二阶交叉(实现了自动二阶特征交叉)
+DCN:能够指定任意显式交叉
+Autolnt:基于Transformer作特征交叉
+本质:将用户行为序列提炼并压缩成用户兴趣的Embedding
+DIN:利用Attention,将当前的物料t作为用户历史序列的Query
+双层Attention行为序列:第一层Attention历史行为序列内部的依赖关系;第二层是当前物料和历史行为序列
+SIM:将“软过滤”变成“硬过滤”,相当于从长序列选择短序列进行DIN
+定义:将召回问题建模成向量空间中的近邻搜索问题
+分类:两类实体QT,可以是物料-用户、用户-用户、物料-物料
+方法流程:
+建模方法:
数据稀疏性:
-大型的电子商务推荐系统一般有非常多的物品,用户可能买的其中不到1%的物品,不同用户之间买的物品重叠性较低,导致算法无法找到一个用户的邻居,即偏好相似的用户
算法的扩展性
-基于用户的协同过滤需要维护用户相似度矩阵以便快速的找出Topn相似用户, -该矩阵的存储开销非常大,存储空间随着用户数量的增加而增加,不适合用户数据量大的情况使用。
经典算法
基本思想:根据用户之前的喜好以及其他兴趣相近的用户的选择来给用户推荐物品
分类:
杰卡德相似性系数
衡量两个集合的相似度一种指标。两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数
余弦相似度
用户向量i和j之间的向量夹角的大小, 夹角越小, 说明相似度越大,两个用户越相似
1 |
|
皮尔逊相关系数
相比余弦相似度,皮尔逊相关系数通过使用用户平均分对个独立评分进行修正,减少了用户评分偏置的影响(每个向量先进行处理,减去了向量之间的均值)
1 |
|
\[\mathrm{R}_{\mathrm{u}, \mathrm{p}}=\frac{\sum_{\mathrm{s} \in\mathrm{S}}\left(\mathrm{w}_{\mathrm{u}, \mathrm{s}} \cdot\mathrm{R}_{\mathrm{s}, \mathrm{p}}\right)}{\sum_{\mathrm{s} \in\mathrm{S}} \mathrm{w}_{\mathrm{u}, \mathrm{s}}}\]
权重 \(w_{u,s}\)是用户
数据稀疏性:
大型的电子商务推荐系统一般有非常多的物品,用户可能买的其中不到1%的物品,不同用户之间买的物品重叠性较低,导致算法无法找到一个用户的邻居,即偏好相似的用户
算法的扩展性
基于用户的协同过滤需要维护用户相似度矩阵以便快速的找出Topn相似用户,该矩阵的存储开销非常大,存储空间随着用户数量的增加而增加,不适合用户数据量大的情况使用。
深度推荐系统 王喆
https://zhuanlan.zhihu.com/p/407871839
搜索引擎需要用户主动输入自己的意图,有些需求、意愿,是用户自己都意识不到的。将自己拥有的、用户可能喜欢的内容主动展示给用户,从而留住用户花费更多的时间与金钱。这就是推荐系统。
关键词:
推荐、广告、搜索
用户需求表达方式:推荐、搜索
信息服务对象:推搜、广告
相同点:
推荐&搜索 \[F_{search}(t|q,u)\\F_{recommend}(t|u)\]q表示物料对用户查询的匹配程度,搜索有显式的匹配程度,但是推荐没有
搜索:查询语句与物料信息交叉
推荐:用户信息与物料信息交叉
推搜&广告
最终目标性:(优化指标)
实现流程:
召回:根据喜好标签进行选择
排序:根据召回的视频进行排序
根据用户行为进行同步更新
推荐系统功能
存在的问题是数据量太大且时间开销太大无法满足实时要求
召回
精排
粗排
重排
存在的问题:
Lambda架构
离线层
近线层
在线层
必要性:
物料特征
用户特征
交叉特征
偏差特征
无法做到绝对公平,没点击不代表不喜欢,点击的未必喜欢,偏差Bias
AboveClick:只有在点击物料上方的未点击的物料才被当作负样本,没被点击的且不在点击上方的就不放进训练的集合中
处理缺失值
标准化数据
数据平滑与消偏
目标:克服小样本的负面影响,提高计算结果的置信区间
分桶离散化
推荐系统的特征空间:高维、稀疏
增强类别特征表达
类别特征的高维性
类别特征的稀疏
特征如何表征
建立字符串到数字的映射表,缺点在于需要更新维护且对于大规模而言比较难以负担
采用特征哈希Feature Hashing
对于推荐系统而言:记忆+拓展
记忆能够处理80%的需求,但是个性化太弱(评分)
拓展将细粒度变成粗粒度,借助深度学习的Embedding
共享Embedding
独占Embedding
不同的任务使用不同的Embedding的方法
如果在特征交叉的时候使用的是共享Embedding,会产生相互干扰的情况(不同需求要求不同Embedding)
FFM:每个特征在与不同特征交叉的时候,根据对方特征所属的Field要使用不同的Embedding
CAN:既要使用不同的Embedding进行特征交叉,但是又不想要太多的参数导致训练的难度增加
传统利用Hadoop/Spark的分布式训练方法忽略了高维稀疏特征空间直接让master处理会参数量很大
使用PS架构的好处:
一个Server只负责处理海量参数中的一部分
同步并发
异步并发
无须等待,不存在短板效应,有明显的速度优势
梯度失效的问题:
半同步半异步
允许Worker节点在一定迭代轮数中保持异步,但是如果最快节点和最慢节点的迭代步数之差已经超过了允许的最大值,那么所有的参数都需要停下来进行一次参数的同步
传统方法:FTRL
FM:引入了二阶特征交叉(手动二阶特征交叉)
Wide&Deep:兼顾记忆与扩展
DeepFM :融合二阶交叉(实现了自动二阶特征交叉)
DCN:能够指定任意显式交叉
Autolnt:基于Transformer作特征交叉
本质:将用户行为序列提炼并压缩成用户兴趣的Embedding
DIN:利用Attention,将当前的物料t作为用户历史序列的Query
双层Attention行为序列:第一层Attention历史行为序列内部的依赖关系;第二层是当前物料和历史行为序列
SIM:将“软过滤”变成“硬过滤”,相当于从长序列选择短序列进行DIN
定义:将召回问题建模成向量空间中的近邻搜索问题
分类:两类实体QT,可以是物料-用户、用户-用户、物料-物料
方法流程:
建模方法:
vector的长度:
for循环:
链接:https://leetcode.cn/problems/binary-search/description/
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回-1。
示例 1:
1 |
|
示例 2:
1 |
|
题目表示的是有序数组,而且题目没有重复元素。在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则
1 |
|
注意这里给出的题解法:当left <= right
的时候,以下的条件中全部都不取到等号nums[middle] > target nums[middle] < target
需要注意的是:right=nums.size()-1
C++版本
1 |
|
Go版本
1 |
|
https://leetcode.cn/problems/remove-element/description/
示例 1:
1 |
|
示例 2:
1 |
|
双指针法(快慢指针法):通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
定义快慢指针
C++版本
1 |
|
python版本
1 |
|
GO版本:
1 |
|
vector的长度:
+for循环:
+链接:https://leetcode.cn/problems/binary-search/description/
+给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target +,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 +-1。
+示例 1:
+
|
示例 2:
+
|
题目表示的是有序数组,而且题目没有重复元素。在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则
+
|
注意这里给出的题解法:当
+left <= right
的时候,以下的条件中全部都不取到等号
+nums[middle] > target nums[middle] < target
需要注意的是:right=nums.size()-1
C++版本
+
|
Go版本
+
|
https://leetcode.cn/problems/remove-element/description/
+示例 1:
+
|
示例 2:
+
|
双指针法(快慢指针法): +通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
+定义快慢指针
+C++版本
+
|
python版本
+
|
GO版本:
+
|
深度推荐系统 王喆
+https://zhuanlan.zhihu.com/p/407871839
+搜索引擎需要用户主动输入自己的意图,有些需求、意愿,是用户自己都意识不到的。将自己拥有的、用户可能喜欢的内容主动展示给用户,从而留住用户花费更多的时间与金钱。这就是推荐系统。
+关键词:
+推荐、广告、搜索
+用户需求表达方式:推荐、搜索
+信息服务对象:推搜、广告
+相同点:
+推荐&搜索 \[ +F_{search}(t|q,u)\\ +F_{recommend}(t|u) +\] +q表示物料对用户查询的匹配程度,搜索有显式的匹配程度,但是推荐没有
+搜索:查询语句与物料信息交叉
+推荐:用户信息与物料信息交叉
+推搜&广告
+最终目标性:(优化指标)
+实现流程:
经典算法
-基本思想:根据用户之前的喜好以及其他兴趣相近的用户的选择来给用户推荐物品
-分类:
+召回:根据喜好标签进行选择
+排序:根据召回的视频进行排序
+ +根据用户行为进行同步更新
推荐系统功能
杰卡德相似性系数
-衡量两个集合的相似度一种指标。 -两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数
余弦相似度
-用户向量i和j之间的向量夹角的大小, 夹角越小, 说明相似度越大, -两个用户越相似
-
|
皮尔逊相关系数
-相比余弦相似度, -皮尔逊相关系数通过使用用户平均分对个独立评分进行修正, -减少了用户评分偏置的影响(每个向量先进行处理,减去了向量之间的均值)
-
|
存在的问题是数据量太大且时间开销太大无法满足实时要求
+召回
\[ -\mathrm{R}_{\mathrm{u}, \mathrm{p}}=\frac{\sum_{\mathrm{s} \in -\mathrm{S}}\left(\mathrm{w}_{\mathrm{u}, \mathrm{s}} \cdot -\mathrm{R}_{\mathrm{s}, \mathrm{p}}\right)}{\sum_{\mathrm{s} \in -\mathrm{S}} \mathrm{w}_{\mathrm{u}, \mathrm{s}}} -\]
- 权重 \(w_{u,s}\)是用户\(u\)和用户\(s\)的相似度,\(R_{s,p}\) 是用户\(s\)对物品\(p\)的评分
-数据稀疏性:
-大型的电子商务推荐系统一般有非常多的物品,用户可能买的其中不到1%的物品,不同用户之间买的物品重叠性较低,导致算法无法找到一个用户的邻居,即偏好相似的用户
算法的扩展性
-基于用户的协同过滤需要维护用户相似度矩阵以便快速的找出Topn相似用户, -该矩阵的存储开销非常大,存储空间随着用户数量的增加而增加,不适合用户数据量大的情况使用。
精排
+粗排
+重排
+存在的问题:
+Lambda架构
+ + +离线层
+近线层
+在线层
+必要性:
+物料特征
+用户特征
+交叉特征
+偏差特征
+无法做到绝对公平,没点击不代表不喜欢,点击的未必喜欢,偏差Bias
+Above +Click:只有在点击物料上方的未点击的物料才被当作负样本,没被点击的且不在点击上方的就不放进训练的集合中
处理缺失值
+标准化数据
+数据平滑与消偏
+目标:克服小样本的负面影响,提高计算结果的置信区间
+分桶离散化
+推荐系统的特征空间:高维、稀疏
+增强类别特征表达
+类别特征的高维性
+类别特征的稀疏
+特征如何表征
+建立字符串到数字的映射表,缺点在于需要更新维护且对于大规模而言比较难以负担
+采用特征哈希Feature Hashing
对于推荐系统而言:记忆+拓展
+记忆能够处理80%的需求,但是个性化太弱(评分)
+拓展将细粒度变成粗粒度,借助深度学习的Embedding
+共享Embedding
+独占Embedding
+不同的任务使用不同的Embedding的方法
如果在特征交叉的时候使用的是共享Embedding,会产生相互干扰的情况(不同需求要求不同Embedding)
FFM:每个特征在与不同特征交叉的时候,根据对方特征所属的Field要使用不同的Embedding
CAN:既要使用不同的Embedding进行特征交叉,但是又不想要太多的参数导致训练的难度增加
+传统利用Hadoop/Spark的分布式训练方法忽略了高维稀疏特征空间 +直接让master处理会参数量很大
+使用PS架构的好处:
+ + +一个Server只负责处理海量参数中的一部分
+同步并发
+ +异步并发
+无须等待,不存在短板效应,有明显的速度优势
+梯度失效的问题:
+半同步半异步
+允许Worker节点在一定迭代轮数中保持异步,但是如果最快节点和最慢节点的迭代步数之差已经超过了允许的最大值,那么所有的参数都需要停下来进行一次参数的同步
+传统方法:FTRL
+FM:引入了二阶特征交叉(手动二阶特征交叉)
+Wide&Deep:兼顾记忆与扩展
+DeepFM :融合二阶交叉(实现了自动二阶特征交叉)
+DCN:能够指定任意显式交叉
+Autolnt:基于Transformer作特征交叉
+本质:将用户行为序列提炼并压缩成用户兴趣的Embedding
+DIN:利用Attention,将当前的物料t作为用户历史序列的Query
+双层Attention行为序列:第一层Attention历史行为序列内部的依赖关系;第二层是当前物料和历史行为序列
+SIM:将“软过滤”变成“硬过滤”,相当于从长序列选择短序列进行DIN
+定义:将召回问题建模成向量空间中的近邻搜索问题
+分类:两类实体QT,可以是物料-用户、用户-用户、物料-物料
+方法流程:
+建模方法:
+