上一节
产品经理也能动手实践的AI(四)- 多标签识别,图像分割
讲了多标签识别,图像分割和data block,这之前讲的都是图像识别的方法,今天一节课把剩下的3种核心领域都讲了:自然语言处理,表格数据处理,协同过滤,并且把神经网络层与层之间的微观活动也都详细的描述了一遍,可谓是干货满满。
1.概览
首先是自然语言处理 NLP(Natural Language Processing ),主要讲解通过迁移学习来实现IMDB评论的正负面情绪分辨;
然后是根据个人信息的数据,预测哪些人可以获得高薪;
最后是协同过滤,在用户喜欢了一些电影之后,可以预测某个他没看过的电影是否会喜欢。
2.1核心流程
NLP - IMDB情绪分析大概需要3步,建立宏观的语言模型,利用的是Wikipedia的数据训练的模型;然后是根据IMDB的数据训练定向的电影行业语言模型;最后是用训练好的语言模型,训练一个正负面情绪的分类器。
表格数据处理-薪资预测:主要是把类别变量转化成连续变量,比如职业、婚姻情况等……会转化成0,1,2这样的数字;然后通过processor进行预处理,然后就可以训练了。
协同过滤-推荐喜欢的电影:流程都一样,只不过使用特殊类型的CollabDataBunch,以及特殊的collab_learner。
2.2核心机器学习概念
参数 weights/parameters:用于计算的参数/权重矩阵
激活 activations:计算后的结果,包含矩阵运算后的结果和激活函数运算后的结果
激活函数 activation functions:一般是ReLU函数,只改变内容不改变size
3.1实例详细分析(NLP)
建立宏观的语言模型,利用的是Wikipedia的数据训练的模型(Wikitext 103);
-
"I'd like to eat a hot ___":
Obviously, "dog", right?
-
"It was a hot ___":
Probably "day"
不需要label,因为每个next word都是一个label,这种方式叫自监督学习;
然后是根据IMDB的数据训练定向的电影行业语言模型;
准备数据:read from csv
token化:把一句话拆成一个个词,不常用的词会用xxunk,xxpad之类的统一代替,成为vocab词汇表
数字化:把一个个词,转化成一个个数字,像这样array([ 43, 44, 40, 34, 171, 62, 6, 352, 3, 47])
创建databunch
创建learner:会用到dropout和regularization参数,之后会讲
训练:得到的模型叫encoder
调整
最后是用训练好的语言模型,训练一个正负面情绪的分类器;
text_classifier_learner
learn.load_encoder
freeze_to:解冻后几层,而不是全部解冻,这样可以训练处更高的准确率
3.2实例详细分析(tabular & collab)
流程上没什么新东西,就不展开来说了
3.3原理详细分析(神经网络训练过程)
整个过程如下图,先输入一个[10,20,30]的vector,然后和一个3*N的矩阵相乘,得到一个结果,再把结果用激活函数处理成更剧本特征量的结果,在进行矩阵乘积,直到最后的输出。
输出结果一般会使用sigmoid函数将其转化成0,1区间内的额值,然后再和验证组的数据进行比对,求loss,然后进行SGD,最后得到了一个93%准确度的拟合出的函数。
Jeremy还用excel演示了一下这个过程,真的是对大神佩服的五体投地,用excel训练神经网络,对就是这样。
首先这里是用于训练的数据,14号用户对27号电影的评价是3颗星,满分5颗星。
然后随机生成了2组矩阵,分别给用户和电影,相当于weights
实验的目标是要预测空白处的值,比如293号用户对49号电影的评价是几颗星?
下面开始初始运算,运用点积运算,将每个空格填上,其实就是2个矩阵的矩阵乘积的结果
这时候就可以看第一次运算的结果和实际结果的偏差,计算出的loss是2.81,接下来去调整weights然后降低loss,即SGD的过程,就可以得到一个好的模型了。
4.最后
这一期可能需要多看两遍,反正我是2-3遍之后才能基本吃透里面的概念,因为一开始真的没那么好懂。
获取课程资源,比如中英文字幕的视频,以及全英文的完整课程笔记,请回复“fastai课程资源”。