《深度学习算法实践》读书笔记

开篇问:从word复制笔记上传格式老是出问题,求教


1.开始

如何由工程思维转化到算法思维

算法的开发流程:

开始-观察-实验-模型-观察-更新模型-结果输出

具体来说:

1.  明确需求

2.  观察需求所涉及的问题

“三个重要概念:准确率(Accuracy)、召回率(Recall)、精确率(Precision),例如1000封正常邮件,500封垃圾邮件,100封重要邮件,模型一共找出100封正常邮件、400封垃圾邮件、5封重要邮件

准确率(垃圾邮件)=提取出的正确信息条数/总样本数=400/1600

精确率(垃圾邮件)=提取出的正确信息条数/提取的信息条数=400/(400+5+100)

召回率=提取出的正确信息条数/样本中的信息条数=400/500”

是希望召回率高还是精确率高呢,可以做一个Precision-Recall曲线来分析

3.  算法工程实践

原则:算法为业务服务,不要为了算法而算法

4.  测试

如何评价一个模型,除了3个主要指标,还有F1-Measure,表示召回率和准确率的调和均值,F1=2PR/(P+R)

算法研发的方法论:CRISP-DM、SEMMA

以SEMMA为例:流程图(省略)

分为数据取样-数据特征探索、分析和预处理-问题明确化、数据调整和计算选择-模型的研发、知识的发现-模型和知识的解释和评价

“需要注意模型衰退的问题,也就是随着数据更新,模型准确率下降。算法要不断更新“

观察变化和不变是最重要的

2.文本分析实践

·      关于邮件分类问题的复盘

特征提取是第一步

垃圾邮件的标题一般是什么样的

先用jieba分词包做断句,并进行去除非法字符等预处理

然后选用特征提取的算法

我们首先想到的是贝叶斯、SVM、决策树等,但准确率不高,于是考虑CNN做文本分类,步骤如下:

第一步选取最长的句子作为向量长度,其他句子长度

第二步将训练集和测试集分开训练

·      关于文本情感分类

如何用算法思维解决问题

分析需求,情感倾向可以暂考虑三类:支持、反对、中性。情感分类方法主要两类:基于情感词典的方法和基于机器学习的方法,对比两种方法的优劣,发现综合判断是必要的,机器学习的数据集要根据不同行业确定,这样可以提高准确率

·      关于文本深度特征提取

自然语言数学化是第一步

文本的深度特征表示方法:

词典法将所需处理的文档所有词进行剔重、排序,形成一个词典,这样可以用集合表示一句话

One-HOt把每个词表示成一个向量,向量长度为句子长度,在向量中该词出现的位置填1,其他位置填0

n-gram组的思想,1gram表示一个单词,n-gram表示按长度n切分原词得到的词段

分布表示和词嵌入特征表示将所有词分散在一个平面中,词的坐标已知,依靠平面位置可以得到词和词的关系;

在词特征表示之后研究句子特征表示

有两种方法:传统的VSM方法以及基于神经网络表示法

主要研究神经网络表示

基于RNN的方法是将句子中的词逐个输入到模型中,结束时取隐藏层的输出即可。

基于CNN的方法是将句子中的词的向量表示拼接成一个矩阵,然后进行卷积,最后得到一个向量表示。深层CNN让深度语义特征提取取得进步。

3.对话机器人

观察并理解人类对话

如何建立庞大的QA(问答组)

爬取网上的数据(1.定义一个爬虫;2.抽取答案;3.选取答案)

如何让机器回答一个具体的问题:

1.  问题分类、问题理解

2.  求问题和检索答案段落的文本相似性,答案搜索和答案提取

3.  判断答案是否由一个段落蕴含(蕴含关系,为了评价从一段文字中得到的推论是否符合原文的本意),选择合适的答案

检索式模型(采用人工制作的回复库)

生成式模型(可以重新提及输入中的实体并带给你对话的感觉)


如何判断对话准确性

BLEU评测方法

4.  视觉识别

表情识别流程图

Dlib中包含CNN

Openface库专门针对人脸检测和分类

深度卷积网络(CNN)

演变路径为(1)更深的网络;(2)增强卷积的功能;(3)目标检测;(4)反卷积

反卷积主要用来还原卷积过程中的某一层的过程,将卷积过程可视化

生成式对抗网络(GAN):建立一个学习模型,模拟生成模型和判别模型,两者不断竞争提高两个模型的能力,LeCun评价GAN是20年来机器学习领域最酷的想法)

更深的网络——>深度太深带来网络的退化,性能也逐步降低——>加入残差

通过的提高精度的方法:

1.联合模型:(1)将深度网络视为单一基类分类器;(2)使用深度网络来提取特征,并用n-1层的输出作为分类器的输入

对于第二种方法:尝试以ReNet50、Inception v3、Xception三个模型为基础模型,在n-1层做特征合并,最后输出表情分类,网络结构如下:

2.DSD(Dense Sparse Dense)训练方法

具体步骤如下:

(1)  初始的完整网络训练(Dense):目的是找到需要剪枝的单元或权重;

(2)  剪枝后网络训练:也就是稀疏结构(Sparse)训练根据第一步的结果,选择需要剪枝的单元或者权重去除,剪枝后再次进行网络训练

(3)  再恢复到完整网络训练(Dense):将所有剪枝的单元权重恢复,初始赋值为0,再次进行训练


如何增加训练数据?

通过随机变换图像的大小、颜色、主体的位置等来将一幅图像增加到多幅图像,相当于将数据扩展了n倍。

如何防止过拟合?

Dropout:在模型训练时随机让网络的某些隐含层节点的权重不工作,人为得随机让几个神经元失效

其他经验

l  转化为RGB的色彩空间更利于学习

l  一般使用全连接层用于最后输出

l  训练数据的干净程度比数据大小更重要

l  如果不能增加图像尺寸,减少卷积层的stride也可以达到同样的提取特征的效果



目标检测

第一阶段:传统思路

区域选择-特征提取-分类器

第二阶段:基于R-CNN的深度学习目标检测算法

R-CNN算法流程:

1.  利用Selective Search算法输入图像中提取200个左右的区域作为CNN的输入

2.  将每个Region Proposal缩放为227*227的大小并输入到CNN

3.  将每个Region Proposal 提取到的CNN特征输入到SVM进行分类


该方法缺点是算法步骤繁琐,耗时

SPP-NET算法:

只对图像提取一次卷积层特征,然后将Region Proposal提取的候选区域在原图的位置映射到卷积层特征上,从而节省时间


Fast R-CNN(ICCV2015)


FaseterR-CNN(NIPS2015)

其核心是RPN和权值共享

权值共享(RPN和Fast R-CNN共享卷积层的特征)

第三阶段:基于回归方法的深度学习目标检测算法

回归:给定输入图像,直接在卷积层的多个位置回归出这个位置的类别,目标边框和置信度

YOLO算法:

端到端的训练过程,直接在卷积层的多个位置回归出这个位置的类别,目标边框,从而节省了大量提取边框的时间,速度达到实时监测的条件。

缺点在于检测精度不高

SSD算法:

SSD结合了YOLO的回归思想和Faster R-CNN的anchor机制,从而解决Faster R-CNN速度慢和YOLO精度不准的问题


算法应用:

>艺术风格画

(2016这个算法刚出来的时候,一个年轻人推出一个叫Prisma的APP)

>看图说话:用文字描述图像

(BiRNN+CNN)

>语音识别

(RNN+CNN)


5.  强化学习实践

强化学习几个概念:

以吃豆子游戏为例

环境( environment ):边界或者说移动范围,还有一些规则,比如规定吃到东西单细胞生物就可以长大,吃到病毒就挂掉重新开始

奖励( rewards ):奖励有两个,一个是吃到微生物就可以成长,定义该奖励是正值;另一个是吃到病毒就减分或挂掉,定义该奖励为负值

动作( actions ):允许的单细胞生物的动作

MDP过程(马尔科夫过程)


状态(states)

动作集(actions)

状态转移概率(Psa)

奖励函数(reward)

折扣因子(discount

factor,gamma):对未来奖励的不确定的表示

强化学习和最优路径选择的不同在于

强化学习不能穷尽所有的路径,因为根本看不到最终的状态


理解Q网路

Q学习过程:

def learnQ(self,

state, action, reward,value)

oldv=self.q.get((state,action),None)

if old is None:

self.q[(state,action)]=reward

else:

self.q[(state,action)]=oldv+self.alpha*(value-oldv)


模拟物理世界:OpenAI

openAI是为强化学习创造了一个虚拟的世界,这个世界模拟了现实生活中的各种物理规律,在这里智能体才能很好完成交互。

如何用openAI实现一个DQN:

「DQN非常有用,这个也许是可以应用在笑脸识别中的,通过不断识别笑脸强化学习过程,具体怎么实现呢?」

DQN过程的图表化

使用TensorBoard进行可视化


关于强化学习的思考

1.   训练数据的获取方式:强化学习的任务是学习一个新的目标函数,其训练信息是从跟环境的互动而得到

2.   探索:学习器面临一个权衡过程,是选择新数据还是选择已经学习过了

3.   目标:强化学习的数据是序列的交互的,并且有反馈,本质是一个决策模型,监督学习更偏向于在固定数据中寻找答案

4.   长期学习:强化学习需要使用先前获得经验和知识在学习新任务时减少样本复杂度,并且整个过程是不停迭代的

5.   强化学习具有自我进化能力


知识的形成要素:

记忆网络的发展

LSTM(长短时模型)通过隐行的共享记忆结构,不完全得实现知识存储

NTM(神经图灵机)包含神经网络控制器和存储器组,模拟大脑皮层的记忆功能,但是只能接受少量新任务观测

「仿生学非常值得研究,里面有促进应用学科发展的力量」

MANN相比于NTM在每次读写存储过程会选择最近利用的存储位置


终极理想:终身学习

让机器能够自主得终身学习

一个终身学习系统包含四个基础部分:

知识库(Memory)

控制器(Controller)

知识转移或知识应用(Read)

知识归纳(Write)

6.  预测和推荐

股票预测应用

「有空务必尝试」

1.   先提取个股数据

(1)  股票的日线和30日线

(2)  舆论数据:论坛发帖数据

(3)  经济环境数据

预测第二天涨跌用[0,1]表示涨,[1,0]表示跌

2.数据处理

Csv格式保存数据

2.   模型搭建:圈定MLP、LSTM、xgboost、多层卷积、

【按照作者改进的量化投资模型实际测试产生6%以上的盈利】


思考

至此完成本书的阅读

这本书应该是我目前读过实用性最强、最清晰的介绍类书籍

但是目前只是形成了完整的知识架构,对具体算法缺少程序级的理解

需要认真读程序,逐个理论攻破

越学习越觉得自己无知

你可能感兴趣的:(《深度学习算法实践》读书笔记)