在1956年的达特茅斯会议上,麦卡锡、明斯基、香农等科学家首次提出人工智能。在这之后,一种叫做感知机的神经网络模型被提出来,一些具有逻辑推理能力的程序被开发出来。由于早期的人工智能程序只能处理一些特定领域的简单问题,所以人工智能发展遇到了停滞。
上世纪80年代,一种叫做专家系统的人工智能应用的商业价值被认可,人工智能又迎来了一波大发展,但是随着数据的发展,硬件水平和维护代价越来越大,使得人工智能的发展又遇到了停滞。
21世纪,随着大数据和云计算的发展,人工智能能在数据和计算能力的需求上有了突破的进步,人工智能又会有一个发展的好机会。在能够遇到机遇的时候迎接挑战,才能在风云变幻的时代成为弄潮儿。
Deep Mind 和强化学习
2013年底,一家名为Deep Mind的公司发表了一篇名为Playing Atariwith Deep Reinforcement Learning的文章。在其中描述了一个有自主学习多个游戏玩法、随着游戏的不断增多不断优化游戏表现的深度强化学习模型。之后Deep Mind开发的alpha go击败了围棋世界冠军。之后发布的Alpha Go Zero从零开始自学,不适用任何人类棋谱,更是战胜了之前的Alpha Go。
强化学习的特点:通过自身行为影响环境,再通过环境反馈调整自身行为。
周期三段论和周期中的产品经理
三个周期:
1)技术先于产品。新技术诞生的初期,企业开始布局,挖人才进行研究或者技术储备,这阶段技术决定产品的有无。
2)产品先于技术。新方向下技术积累完成,商业化、产品化成为公司关注的方向。
3)运营先于产品。产品逐渐成熟,运营能力和资源的竞争成为主要问题。
周期中的产品经理:
第一阶段:其他产品经理开始布局人工智能。
第二阶段:将人工智能与公司现有业务结合,提升用户体验。
第三阶段:从细节中挖出改善用户体验的需求,形成竞争差异化。
现在人工智能已经进入第二周期。
1、产品经理的层次
产品经理需要了解目前的人工智能技术,提高决策水平和沟通能力。产品经理对技术的理解能力一般划分为三个层次:
1)什么能做,什么不能做。对应现在产品经理岗位需求中的“了解技术边界”,产品的设计和需求终究还是要再解决问题和技术实现之间找到平衡点,了解技术边界就可以提出可以落地的用户需求解决方案,有效高效的跟研发人员沟通。
2)什么好做,什么不好做。产品经理能够对自己方案所需的开发量进行初步估计。产品经理需要知道系统分为哪几个模块,每个模块的角色,能够将产品需求根据模块进行任务分解,推动产品落地。
3)什么该做,什么不该做。明确系统中每个模块的定位和意义,以业务为导向,与研发推动系统架构的优化和改造。
总结,第一层:确保需求的可行性;第二层:实现方案按模块拆解,对各个模块进行工作量评估;第三层:协助开发人员从业务角度保障系统架构的合理性。
2、技术型产品经理的定位
技术型产品经理就是有较深技术背景的产品经理,其应该与研发之间有清晰的分工边界。研发需要解决提出的问题,产品经理负责需求并提出问题。
产品经理提出问题的质量决定了产品的质量,产品经理的布局决定了产品的布局。问题的质量由两方面衡量:深度、全面性。
问题的深度和产品经理提出需求的具体程度正相关。反映了产品经理对原始抽象问题的加工能力。比如,我想做一个机器人,能回答用户的问题。产品经理要定义,“问题”包含哪些,“回答”的方式有哪些。
问题的全面性和问题的深度正相关。产品经理需要对产品的设计有一定的预见性。
3、技术型产品经理的价值
技术型产品经理偶从两个角度发挥自己的差异化价值:充分利用现有技术、推动新技术研究。
充分利用现有的技术:在方案设计时,利用对“技术边界的认知”,找到业务和技术的结合点。在方案落地式,利用技术常识评估对需求的开发量,并对任务进行拆解,将一个抽象目标转化成各个模块所需要求解的具体问题。
推动新技术研究:预见性和解决未来问题的能力。在正确理解公司业务发展方向的基础上,对支撑业务发展所需的技术有一个明确的认知。对需求有明确的优先级,协助研发推动新技术向解决业务问题的方向发展。
4、技术型产品经理的思维能力
对于产品经理有两项重要的思维能力:
抽象能力:分析问题是能透过现象看本质和关键因素。
归纳能力:将抽象结果进行重组,从中得到规律和经验。
1、系统中的杠杆点
杠杆点就是系统中施加一个极小的变化,就能对整个系统行为产生巨大影响的点。在系统中的杠杆点就是解决问题的核心,产品经理在解决问题核心的时候应该做长远的打算,不能只看眼前,应该注重问题方案是否正确而不是方案的细节是不是完善。
2、优秀软件系统的特征
1)高内聚、低耦合:一个模块仅负责一项任务,不同功能的模块在逻辑上保持独立性,模块间的联系尽可能的抽象。
2)高通用性:方案设计对原始业务进行抽象,提供一类抽象问题对解决方案,解决一类问题而不是一个问题。
3)可拓展性:强调抽象时对预见性,随着业务对增加,在出现需要解决对新类型问题时,对系统可能发生对改变提前做好兼容性准备。
面向对象中对开闭原则:对模块对拓展是开放的,对模块的修改是关闭的。就是说,系统系统模块的行为可以被扩展,能够根据具体业务需求作出改变,,从而具备改变的新行为;系统在进行拓展时,不能对模块对原有部分进行修改。
3、系统设计对基本问题
1)为了解决当下业务需求所属的通用问题,需要哪些模块的协同工作?哪些模块已有,哪些需要新增?
2)设计业务解决的模块其定位和职责是什么?相互的耦合关系?
3)每个模块的输入输出是什么?
4)整体模块的调用顺序是什么?
5)整个系统的行为和输出是否稳定?是否符合业务需求?
平台设计的业务需求从最初的想法到最终落地的通用化过程。主要有8个阶段:
1)方向阶段:分析用户行为数据和与客户详谈,初步得到用户需求,得到平台的实现目标。
2)联想阶段:在得到设计目标的同时给出目标对应的典型场景。
3)定义阶段:结合前两个阶段的设计目标和业务场景,明确什么样的系统能承担这样的任务。如,系统的模块组成、各个模块的功能、每个模块的输入输出、模块的上下位关系、系统调用顺序。
4)推演阶段:利用联系阶段得到的业务场景,结合定义阶段产出的系统设计方案进行方案推演,假定系统开发已经完成,应当如何对业务逻辑进行配置,及其与固化对非业务逻辑相结合之后,是否能够满足业务场景需求。
5)抽象阶段:对原始业务抽象化,解决一类问题而不是一个问题。
6)规划阶段:根据各类业务对优先级,确定平台的落地方案,根据业务发展趋势对后续平台的迭代方案进行初步规划。
7)验证阶段:落地方案及后续平台优化迭代计划和研发核对,保证方案可行性。
8)落地阶段:任务拆解、任务分配、时间评估、确定上线计划等。
核心是定义和抽象,定义阶段明确了系统框架,决定了系统未来发展的可能性;抽象阶段决定了系统能否如预期般返回价值的重要阶段,也是将平台设计目标抽象实体转换为可行方案过程中的重要转折点。
k-近邻算法(KNN)、ID3决策树、朴素贝叶斯算法、逻辑回归、支持向量机SVM、Ada Boost算法、线性回归和树回归、K-means算法、Apriori和FP-Growth、PCA和SCD、主题模型LDA等。具体分析和介绍看以前博客。
通过组合多个弱分类器,构建一个强分类器。在集成学习中,主要有两种基本算法:bagging、boosting。
bagging:自汇聚法,比如原训练数据集有N个样本,每次从原数据集中有放回的重复抽取N次,就得到一个新的包含N个样本的新数据集。重复抽取S个N次,就得到S个包含N个样本的数据集,使用S个数据集分别训练不同的分类器,同时使用训练出来的分类器进行分类,最后选择多数分类器的分类结果作为最终结果。
boosting:通过组合多个弱分类器来构建强分类器,将多个弱分类器的分类结果进行加权综合,最终得到正确率远高于单一弱分类器的强分类器。
两者区别:
bagging,用自举的方式创造来新的数据集,构建多个分类器并行训练,没有分类器权重概念。
boosting,用原数据集,串行训练,每个新分类器的训练都会受到之前分类器的影响,每个分类器都有权重,代表分类器在上一轮分类中的成功度。
LDA模型中,每一篇文档都有一个主题向量,主题向量决定来这篇文档中单词的主题分布,文档中每个单词都先经过主题向量确定主题,然后根据主题生成。为了使每次生成的文档不同,LDA模型额外引进来两个参数:一个用于生成每篇文档的主题向量,另一个与主题一起决定每个单词的生成。
LDA模型是通过EM算法(期望最大化算法)实现的,利用训练语料,最终使LDA收敛到一个合理的分布上。LDA可以合理的将单词归类到不同的隐含主题中,得到单词之间的语义相近关系,如果文档的主题向量类似,即文档之间的主题分布类似,则两篇文档具有较高的相似度。广泛用于个性化推荐/社交网络、广告预测等领域。
深度学习的概念起源于对人工神经网络的研究,基本的学习模型是深度神经网络。深度学习和传统机器学习不一样的地方在于原始数据不需要经过特征工程,直接可以作为深度神经网络模型的输入,不需要预先利用人类的各领域知识对原始数据进行抽象来提供样本的关键特征。
人类的神经细胞有,细胞体、轴突、树突和突触,神经细胞的状态取决于这个细胞从其他细胞所得到的信号量及突触强度,当信号量超过某个阈值的时候,神经细胞兴奋,产生电脉冲,电脉冲沿着轴突、树突、突触传递到其他神经细胞。
最简单的神经网络叫做感知机。为了模拟人类的神经系统,在感知机模型中,权重概念对应突触、偏置代表阈值、激活函数对应细胞体。不同维度的输入与对应的权重乘积相加,再加上偏置,得到的结果传入激活函数中,激活函数处理后得到输出。
多个感知机就构成来人工神经网络。
卷积神经网络CNN
1984年日本学者福岛所提出的神经认知机,被视作CNN的第一个实现。将一个视觉模式分解为若干个子特征,然后进入分层递阶相连的特征平面进行处理,即使物体有轻微的变形或位移,也能保证识别的正确性。
卷积神经网络由卷积层、池化层和全连接层组成。
全连接层是网络的最后几层,其中的每个神经元都与上层中的所有神经元连接。
卷积层和池化层所起的作用是将原始数据中的特征进行抽象,最后的全连接层是利用这些抽象出的特征对样本数据进行分类,并为样本打上标签。
卷积层和池化层是CNN的核心。
卷积层由若干特征图构成。特征图由卷积和对输入数据卷积后得到,卷积核可以看作是对特定特征非常敏感的探测器。卷积核对输入数据进行卷积对过程实际就是一种尝试发现输入数据中某一个特定特征的过程,而特征图会记录卷积核在原输入数据不同部位的激活程度(特征越契合,激活程度越高)。每个卷积核负责识别一种特定特征,卷积后产生一张对应该特征的特征图,由于卷积核不止一个,所以会有很多个特征图与之对应。
池化层是用来缩减输入数据的规模,将特征图中若干个激活值合并为新特征图中的一个激活值。合并的方法有很多种,比如最大值合并、平均值合并、随即合并。
卷积神经网络中,卷积核的宽和高,以及卷积核的个数由人工预先定义得到。卷积核对什么特征敏感是随机初始化后经过不断训练逐步确定下来的。卷积核是卷积神经网络中需要被训练的主要部分,训练的目的是使其对输入数据中的关键特征敏感,从而最大限度地帮助后序卷积层中的卷积核抽取更高级的特征,以及最终帮助后续全连接层更好的进行类别判断。
相对与传统的前馈神经网络,CNN的优势在于通过“局部感知野”和“权值共享”大大减少来网络中的连接个数,即减少了需要训练的参数个数,极大降低了模型训练所需的计算量。
局部感知野:每个卷积核跟图像中较小的连接部分。
权值共享:卷积核定义是特征识别和探测器,特征出现在原始输入数据中的位置并不会对特征本身对识别产生影响,即对输入特征中任意部分的同一特征都可以采用相同的卷积核来识别。
池化层的输入是卷积后的特征图,在池化时,需要将卷积后的特征图划分为相等的若干局部,然后取这个局部中激活值的平均值或最大值等,最为池化后新特征位置上的激活值。
卷积神经网络可以被用来识别具有位移、缩放、旋转及其他形式扭曲不变性的二维图形。
递归神经网络(RNN)和LSTM
递归神经网络是两种人工神经网络的总称,一种是时间递归神经网络,另一种是结构递归神经网络。目前说的递归神经网络通常是指时间递归神经网络。
递归神经网络的优势在于对序列数据的处理,对于前馈神经网络,由于不相邻的两层之间节点没有连接,在处理有上下文关系的时候无能为力。递归神经网络可以记忆前序输入对隐层的影响,并用在当前输出的计算中,这相当于建立了当前输入和过去输入的关系,在当前输入完全相同的情况下根据不同上下文输出不同结果。
两个隐层之间的连接是递归神经网络具有记忆能力的关键,前序隐层的输出可以被作为后序隐层的输入的一部分使用,所以可以在当前词相同的情况下,根据前序词的不同给出不同的输出。
由于递归神经网络无法处理由于不断递归导致的梯度消失问题,也难以捕捉更长时间的时间关联,所以提处理LSTM--长短期记忆神经网络。标准的递归神经网络由重复模块组成的链式结构,其中的重复模块是间隔的结构,例如tanh(双曲正切函数)层。
LSTM同样存在链式结构,但是模块要复杂的多。
LSTM的神经元由四部分组成:输入门、输出门、遗忘门、记忆细胞。每个神经元接受四种输入,提供一种输出。输入门、输出门、遗忘门各自接受一种信号,输入门接受信号的同时额外接受上一个神经元的输入,输出门额外输出到下一个神经元的输出。输入门、输出门、遗忘门被用来保护和控制神经元状态,且都具有开启和关闭两种状态。若输入门是关闭状态,则LSTM神经元不再接受输入门输入;若输出门关闭,LSTM神经元无法产生有效输出;若遗忘门关闭,记忆细胞过去的记忆将被忘记,LSTM输出完全独立,不受过去影响。
遗忘门的设计可以避免梯度消失的问题出现,其梯度计算的方式和反向传播不同,只要遗忘门不关闭,LSTM就可以一直保持过去输入和输出的影响,即拥有长期的记忆能力。
自然语言处理是研究人与人交际和人与计算机交际中的语言问题的一门学科。
熵H(X):又叫做自信息,是描述随机变量不确定性的大小,描述消除随机变量X不确定性需要的信息量。
联合熵H(X,Y):消除X和Y这两个随机变量不确定性需要的信息量。
互信息I(X;Y):反应两个随机变量X,Y之间的相关性,即已知X后,Y不确定性的减少量,即熵H(Y)的减少量;X,Y的相关性越大,互信息I(X;Y)越大。
条件熵H(X|Y):已知X的条件下,Y的熵。互信息I(X;Y)越大,条件熵H(X|Y)和熵H(Y)的差值越大,如果互信息为零,条件熵等于原熵。
相对熵(KL距离):衡量两个概率分布的差异,当两个概率分布完全相同时,相对熵为0,差异越大,相对熵越大。
交叉熵:用于衡量预测模型和真是概率分布之间的差异情况,交叉熵的计算可以被用作损失函数来度量模型输出结果与标注结果之间的差异。
马尔可夫模型(MM):如果一个系统包含哪个有限状态,随着时间推移,该系统将随机从某一个状态转换到另一个状态。如果在特殊情况下,系统在t时刻的状态只在与t-1时刻的状态i相关,则该系统构成来一个一阶的马尔可夫链。如果在t时刻的状态与之前n个时刻的状态均相关,则该系统就构成来一个n阶马尔可夫链。如果上面提到的随机过程独立于时刻t,则该随机过程就叫做马尔可夫模型。
马尔可夫模型包含任意两个状态之间的转移概率aij,aij需要大于0,且从一个状态i出发到达所有可能的其他系统状态的概率和为1。一个马尔可夫模型状态序列的概率可以通过计算形成该状态序列的所有状态之间的转移概率乘积得出。
隐马尔可夫模型(HMM)
HMM被广泛应用于语音识别、词性标注、音字转换、概率文法等各个自然语言处理领域,是一个概率图模型。
在马尔可夫模型中,每个状态都对应者一个可观察的事件,但是隐马尔可夫模型是一个双重随机过程,包含两个序列:状态序列、观察序列。状态随机转移生成状态序列,是HMM中的第一个随机过程。状态序列经过随机函数得到观察序列,这是HMM中的第二个随机过程,观察序列是可见序列。
HMM由五部分组成:
1)不同状态的数量
2)每个状态所产生的不同符号的数量
3)状态转移概率矩阵
4)状态输出可观察符号的概率分布矩阵
5)初始状态概率分布
观察序列是这样产生的:首先根据初始状态概率分布选择第一个系统状态,在根据系统状态的输出概率分布观察序列中的第一个符号,之后根据状态的转移概率分布选择下一个状态,最后重复执行前面步骤,直到达到指定的状态转移次数。
HMM有三个重要的假设:
1)有限历史性假设:设定t时刻的系统状态只与t-1时刻的系统状态有关,独立与之前的系统状态。
2)齐次性假设:系统的状态与具体时间无关。
3)输出独立性假设:假定观察序列中某一个时刻的输出符号只与该时刻的系统状态有关。
HMM被用来解决三类基本问题:
1)估计问题:给定一个观察序列和隐马尔可夫模型,可以快速计算出这个观察序列由给定模型输出的概率。
2)解码问题:给定一个观察序列和隐马尔可夫模型,求解最有状态序列,使得该状态序列能够最好的解释观察序列。
3)训练问题:给定一个观察序列,可求解使这个观察序列输出概率最大的隐马尔可夫模型。
最大熵模型(MEM)
在只掌握关于未知分布的部分信息的前提下,契合已知信息的概率分布会有多个,其中熵值最大的概率分布真实的反应来事件的分布情况。
最大熵马尔可夫模型(MEMM)和条件随机场(CRF)
最大熵马尔可夫模型结合来隐马尔可夫模型和最大熵模型的特点,隐马尔可夫模型具有输出独立性假设,即认为观察序列中的某个时刻的输出只取决与这个时刻的系统状态,而与观察序列中的其他符号无关,观察符号之间相互独立。最大熵马尔可夫模型舍弃来这个假设,不再认为观察序列中各个时刻的输出符号仅取决于该时刻的系统状态且取值独立。最大熵马尔可夫模型认为某个时刻的系统状态同时取决于前一个状态与当前时刻的输出符号,并利用最大熵模型来学习这个条件概率。相对与隐马尔可夫模型,最大熵马尔可夫模型有能力描述观察符号之间的关联关系。
隐马尔可夫模型还存在一个不合理假设:有限历史假设。认为某个时刻的系统状态只与前一个时刻的状态有关,独立于其他历史状态。条件随机场CRF在最大熵隐马尔可夫模型舍弃独立性输出假设的基础上,一并舍弃来有限历史性假设。条件随机场不再像隐马尔可夫模型那样,在输出独立性假设和有限历史性假设的基础上对各类条件概率进行建模,而是整体地去做函数拟合,采用期望最大化的方法得到拟合程度最高的判别模型。
直接的就是搜索引擎的进化,从人工排序到Google的page link,到现在的分析用户行为偏好和所在当地的地理位置等等。
语义相关性可以用卷积神经网络,通过将以为的文本二维化成一个词文矩阵,再进行类似处理图像像素的卷积和池化操作得到句子的特征向量。注意,这类词进行卷积的时候需要卷积核的宽度和句子二维矩阵相同。RNN也是同样的道理。
对话交互分为:
1、任务型:帮我订票
2、问答型:密码忘了怎么办
3、闲聊型:今天心情不好,好像找人聊天
具体使用最多的要再参考LSTM或者Bi-LSTM和CRF等相关文章,再次不过多赘述。
对话系统有5部分组成:
1)语音识别
2)自然语言理解:分布语义、框架语义、模型论语义
3)对话管理
4)自然语言生成
5)语音合成
任务型问题一般采取框架语义:
分层三层:
1)领域:火车票、酒店......(做什么)
2)框架:订票、退票、订房间、退房间......(一系列动作)
3)参数:出发点、目的地、入住、退房(具体的参数)
具体的流程是:用户表述、意图识别、参数抽取、意图排序、Bot Framework(云小蜜等)
Bot Framework组成:意图、实体、训练
1、意图:用户希望执行的任务或操作。
1)回应:意图的优先级要高,会得到回应
2)动作:关键参数
3)用户表述:定义被识别的用户意图,以及抽取用户问句中的关键信息进行参数值填写。
4)上下文:语境
2、实体:进行参数抽取的基础,约定了参数的取值范围
3、训练:持续提高意图识别、排序、参数识别的准确率。在线服务和离线标注。