Flink简介

Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink 被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。

Flink入门实战(上)

1、事件驱动型(Event-driven)

事件驱动型应用是一类具有状态的应用,它从一个或多个事件流提取数据,并
根据到来的事件触发计算、状态更新或其他外部动作。比较典型的就是以 kafka 为
代表的消息队列几乎都是事件驱动型应用。

​ 与之不同的就是 SparkStreaming 微批次,如图:

img

​ 事件驱动型:

img

Read more »

推荐系统算法大致发展流程如下,主要包括线性模型、树模型和神经网络模型。随着 DNN 在图像、语音、NLP 等领域取得突破,人们渐渐意识到 DNN 在特征表示上的天然优势。相继提出了使用 CNN 或 RNN 来做 CTR 预估的模型。但是,CNN 模型的缺点是:偏向于学习相邻特征的组合特征。 RNN 模型的缺点是:比较适用于有序列 (时序) 关系的数据。

在这里插入图片描述

特征组合

普通的线性模型,都是将各个特征独立考虑的,并没有考虑到特征与特征之间的相互关系。但实际上,大量的特征之间是有关联的。最简单的以电商为例,一般女性用户看化妆品服装之类的广告比较多,而男性更青睐各种球类装备。那很明显,女性这个特征与化妆品类服装类商品有很大的关联性,男性这个特征与球类装备的关联性更为密切。如果我们能将这些有关联的特征找出来,显然是很有意义的。

一般的线性模型为:

在这里插入图片描述

从上面的式子很容易看出,一般的线性模型压根没有考虑特征间的关联。为了表述特征间的相关性,我们采用多项式模型。在多项式模型中,特征

在这里插入图片描述

在这里插入图片描述
的组合用
在这里插入图片描述
表示。为了简单起见,我们只考虑二阶交叉的情况,具体的模型如下:

在这里插入图片描述

式中,n表示样本的特征数量,
在这里插入图片描述
表示第i个特征,与线性模型相比,FM的模型就多了后面特征组合的部分。

Read more »

A/B Test功能上线后,一直没有测试,客户反馈功能无法使用,整理后台代码逻辑,发现以下问题:

1、A/B Test针对策略,不同策略可以有多个模型,模型占比人工配置,如下所示:

在这里插入图片描述

配置实验组时,无法配置策略中模型的占比,且固定模型输入的个数。可以考虑沿用对照组的权重分配占比,或者平均分配,这里需要对用户进行提示。

在这里插入图片描述

2、A/B Test流量随机分组,采用super_id、策略id及租户id三者组合id作为随机id。对于系统的同一个用户,当我们建立多组实验时,并不会随机分割到实验组或者对照组,而是固定组。不同实验的用户分组信息并未存储下来,效果分析对比时,历史实验数据无法区分。

在这里插入图片描述

3、当对照组和实验组策略中模型数量不一致时,默认采用对照组的权重分配。

在这里插入图片描述

4、核心流量分配存在问题,导致分组为空,A/B Test并未生效。不应该对全量用户进行筛选,除去性能的问题也存在准确性的问题,这里全量用户实际上只是真实用户的子集。

Read more »

在线学习

通过线上实时处理数据而进行模型训练,而不是传统模式,把所有数据都放到一起处理(Batch Learning),得到离线的最优解。LR-FTRL (Follow-the-regularized-Leader),Google在10年就提出了一些理论基础,在13年给出了Paper,并且带有FTRL的实现伪代码,在此之后,FTRL才大规模应用在工业界。

离线的训练过程有两个特点:批训练和多epoch。离线训练的过程是非常耗时的,一些大规模的模型的训练时间在小时级甚至天级,巨大的计算时间和资源开销换来的是模型可以在一个更接近真实分布的全量样本上进行梯度计算。而在线学习简单来说是模型可以线上每接收到一个新的样本就进行一次更新,这一点与随机梯度下降(SGD,随机获取一个样本进行一次梯度下降更新)不谋而合,并且在线学习对于每个样本只使用一次,不存在多epoch的概念。

在线学习(Online Learning)能捕捉用户的动态行为模式,实现模型的快速自适应,它对数据 pipeline 的稳定性、流式样本的分布纠偏、模型训练的稳定性以及模型部署的性能都提出了很高的要求,成为提升推荐系统性能的利器。

在这里插入图片描述

优化方法

为了方便描述,假设第t轮要更新的某参数是wt,loss函数关于wt的偏导数表示为gt,即:

在这里插入图片描述

1、随机梯度下降(Stochastic Gradient Descent,SGD):

​ 可以对一个样本都计算一次梯度并更新一次参数,也可以先对一整个 batchbatch一起计算梯度,再更新参数(称为batch-SGD)

Read more »

GAN思想

生成对抗网络 – GAN 是最近2年很热门的一种无监督算法,它能生成出非常逼真的照片,图像甚至视频。深度学习最特别最厉害的地方就是能够自己学习特征提取。

在这里插入图片描述

生成对抗网络(GAN)由2个重要的部分构成:

  1. 生成器(Generator):通过机器生成数据(大部分情况下是图像),目的是“骗过”判别器
  2. 判别器(Discriminator):判断这张图像是真实的还是机器生成的,目的是找出生成器做的“假数据”

训练过程:

第一阶段:固定「判别器D」,训练「生成器G」

第二阶段:固定「生成器G」,训练「判别器D」

第三阶段:循环阶段一和阶段二

通过不断的循环,「生成器G」和「判别器D」的能力都越来越强。

最终我们得到了一个效果非常好的「生成器G」,我们就可以用它来生成我们想要的图片了。

GAN全称对抗生成网络,顾名思义是生成模型的一种,而它的训练则是处于一种对抗博弈状态中的。

Read more »

背景

传统的大多数推荐系统应用存在两个问题:

1、无法建模用户兴趣的动态变化

2、最大化立即收益,忽略了长期受益

强化学习

1、Q-Learning,Q-Learning 是一个强化学习中一个很经典的算法,其出发点很简单,就是用一张表存储在各个状态下执行各种动作能够带来的 reward,如下表表示了有两个状态 s1,s2s1,s2,每个状态下有两个动作 a1,a2a1,a2, 表格里面的值表示 reward

在这里插入图片描述

这个表示实际上就叫做 Q-Table,里面的每个值定义为 Q(s,a)Q(s,a), 表示在状态 ss 下执行动作 aa 所获取的reward,那么选择的时候可以采用一个贪婪的做法,即选择价值最大的那个动作去执行。 Q-Table 要如何获取?答案是随机初始化,然后通过不断执行动作获取环境的反馈并通过算法更新 Q-Table。

在这里插入图片描述

γ 的值一般设置为 0 到 1 之间,设为0时表示只关心即时回报,设为 1 时表示未来的期望回报跟即时回报一样重要。

Read more »

背景

全球汽车行业有两个公认的汽车自动驾驶技术分级标准,二者的定级差异不大:

在这里插入图片描述

L0级:自动驾驶仅能提供警告和瞬时辅助。值得注意的是,主动刹车、盲点监测、车道偏离预警和车身稳定系统都属于L0级别的自动驾驶

L1级:辅助驾驶,能够帮助驾驶员完成某些驾驶任务,且只能帮助完成一项驾驶操作。驾驶员需要监控驾驶环境并准备随时接管。代表性技术应用有:车道保持系统定速巡航系统。

L2级:部分自动化,可以同时自动进行加减速和转向的操作,也意味着自适应巡航功能和车道保持辅助系统可以同时工作。目前很多豪华车辆搭载的就为这一级别自动驾驶。但驾驶员仍需要将双手双脚预备在方向盘及制动踏板上随时待命。

L3级:条件自动化,车辆在特定环境中可以实现自动加减速和转向,不需要驾驶者的操作。驾驶员可以不监控车身周边环境,但要随时准备接管车辆,以应对自动驾驶处理不了的路况情况。这一代奥迪A8L就搭载了L3级别的自动驾驶技术,驾驶感受很是优异。不过在其之前,沃尔沃和特斯拉就已经实现了L3级别自动驾驶技术。

L4级:高度自动化,可以实现驾驶全程不需要驾驶员,但是会有限制条件例如限制车辆车速不能超过一定值,且驾驶区域相对固定,实现L4级别自动驾驶后,已经可以不需要安装刹车和油门踏板了。

L5级:完全自动化,完全自适应驾驶,适应任何驾驶场景。但是涉及到法律、高科技突破等限制,目前还需要进一步深入研发,对应的产品目前还没有实现。

奔驰L3级自动驾驶系统,美国获批使用了。在众多汽车主机厂中,奔驰是美国史上第一个、而且还是仅此一家。有了这套系统,司机可以脱手驾驶,一边开车一边开小差纵情网上冲浪,出了事故也是奔驰的责任。

而且需要注意的是,你可以把头和眼睛侧向一边,但Drive Pilot必须要能够通过摄像头监测到你的脸。一旦你的脸被其他物体遮挡了,系统就会自动退出。

除此之外,奔驰官方甚至将Drive Pilot自动泊车功能直接上升到L4级别,据称可以实现完全无人场景下的自动泊车,包括自动寻找车位、规划路线、主动断电等功能,都已经在量产车上实现。

特斯拉想要的是L4-L5级自动驾驶,L3级是留给蠢蛋的

Read more »

慢SQL获取方式

1、开启慢查询

实时获取有性能问题的SQL,数据库参数设定如下:

img

2、慢日志解析

(需提前安装PT工具):

pt-query-digest slow.log –since ‘2020-06-09 10:43:00’ –until’2020-06-09 10:45:00’> tmp/slow.log

img

处理原则:优先优化高并发SQL,频率低的大SQL次之。

3、慢SQL详细信息
Read more »

优化器定义

流行的深度学习库(如 PyTorch 或 TensorFLow)提供了多种优化器选择,它们各有优缺点。选择不合适的优化器可能会对机器学习项目产生很大的负面影响。这使得选择优化器成为构建、测试和部署机器学习模型过程中的关键一环。

优化器或者优化算法,是通过训练优化参数,来最小化(最大化)损失函数。损失函数是用来计算测试集中目标值Y的真实值和预测值的偏差程度。为了使模型输出逼近或达到最优值,我们需要用各种优化策略和算法,来更新和计算影响模型训练和模型输出的网络参数。

常见的优化器

1、批量梯度下降BGD(Batch Gradient Descent):采用整个训练集的数据来计算损失函数对参数的梯度,计算速度慢

2、随机梯度下降SGD(Stochastic Gradient Descent):更新时对每个样本进行梯度更新,速度快,更新频繁,损失函数可能有严重的震荡

3、小批量梯度下降法MBGD(Min-Batch Gradient Descent):每一次利用一小批样本更新,折中方案,如果学习率很小,收敛速度会很慢,学习率太大,会在极小值附近震荡甚至偏离

4、带动量的SGD(Momentum Stochastic Gradient Descent):为了抑制震荡现象,加入动量控制梯度变化。使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,就可以加快收敛并减小震荡。核心思想:将一个小球从山上滚下来时,没有阻力的话,它的动量会越来越大,但是如果遇到了阻力,速度就会变小

5、AdaGrad:自适应学习率,基于平方梯度之和的倒数的平方根来缩放每个参数的学习率,假如某个参数的梯度很大,那么他的梯度和也很大。梯度之和跟之前的梯度加在一起,求个sqrt作为分母,就会让这个参数的梯度变小。梯度大的参数的步长小,梯度小的步长大,实现每个参数比较均匀的更新。缺点:对梯度求的是平方和,迭代次数增加,步长越来越小,训练速度太慢。(步长等价于学习率,也就是说学习率会越来越小,最后趋近于0)

在这里插入图片描述

Read more »

一、概述

 Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark等都支持与Kafka集成。 Kafka凭借着自身的优势,越来越受到互联网企业的青睐,唯品会也采用Kafka作为其内部核心消息引擎之一。Kafka作为一个商业级消息中间件,消息可靠性的重要性可想而知。

二、Kafka的使用场景

1、日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如Hadoop、Hbase、Solr等;

2、消息系统:解耦和生产者和消费者、缓存消息等;

3、用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到Hadoop、数据仓库中做离线分析和挖掘;

4、运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告;

5、流式处理:比如spark streaming、storm、flink;

6、事件源;

三、定义

Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用与大数据实时处理领域。

消息队列

​ Kafka 本质上是一个 MQ(Message Queue),使用消息队列的好处

  • 解耦:允许我们独立的扩展或修改队列两边的处理过程。
  • 可恢复性:即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
  • 缓冲:有助于解决生产消息和消费消息的处理速度不一致的情况。
  • 灵活性&峰值处理能力:不会因为突发的超负荷的请求而完全崩溃,消息队列能够使关键组件顶住突发的访问压力。
  • 异步通信:消息队列允许用户把消息放入队列但不立即处理它。

发布/订阅模式

Read more »