图神经网络(CNN)二

图神经网络的相关知识

机器学习的分类

按有无标签分类

监督学习

监督学习指的是每个训练数据的样本都有标签,通过标签可以指导模型进行学习,学到具有判别性的特征,然后对未知样本进行预测。

翻译成人话:班里的人分为内卷人和摆烂人,有一个机器会自动观察内卷人的成绩和摆烂人的成绩,等观察的人够多了之后,他就可以根据成绩判断哪个是摆烂人哪个是内卷人,这样机器看到小废物rytter的成绩后就能判断出rytter是个摆烂人。

无监督学习

无监督学习是指训练的数据没有标签,通过算法来发现数据中的约束关系。

翻译成人话:某个机器观察了班里的成绩,根据成绩机器人就能自动将成绩分成两类,内卷人和摆烂人,小废物rytter自然就被分到了摆烂人一类。

半监督学习

半监督学习指的是介于监督学习和无监督学习之间的一种学习方式,他的训练集既包含标签数据,又包含无标签数据。无标签数据会包含数据分布的信息,可以作为标签数据之外的一些补充,因为人工去标记这些数据会有很大代价,而半监督学习可以提供一些解决思路。

翻译成人话:略了,小废物rytter开摆!

按算法输出分类

分类问题

输出一个离散值,比如可以读取一个肿瘤的大小,然后判断是否为恶性肿瘤,这种情况下只有是或者否两种情况,这类问题就叫做分类问题

回归问题

我们通过读取这个数据集,然后给出一个可以和这些值相拟合的一条线,然后可以通过这个函数进行一个预测。列如单变量线性回归方程。

机器学习流程的概述

举个例子

比如我们要给一些商品分类,我们需要建立一个模型,并使用商品的图片数据训练模型,得到有个可以对未知图片进行分类的预测模型。然后我们需要进行的步骤如下:

(1)提取商品图片的特征

首先我们需要找到图片的一些具有区分性的特征,我们可以人为规定特征,这个过程称为特征工程。其实我们还可以通过算法自动提取,这就是深度学习涉及的范围了。

(2)建立模型

选择一个合适的模型进行建模,其实建模就是一个复杂的函数 y = f ( X ; W ) y=f(X;W) y=f(X;W),W是模型的一些参数,是需要不断调整的,X就是前面的特征,通过特征X和训练所得的W得到一个y,就是我们需要的结果。

(3)确定损失函数和进行优化求解

建立模型后如何判断模型好不好用,为了解决这个问题我们提出了损失函数,利用损失函数来判断拟合性如何,基于损失函数的值我们可以通过优化方法进行调整,直到损失函数的值达到我们可接受范围内。

数学模型

以分类模型为例子

首先我们有一个可爱的数据集 X = { ( x i , y i ) ∣ i = 1 , 2 , 3 , . . . , N } X=\{ {(x_i,y_i)|i=1,2,3,...,N} \} X={(xi,yi)i=1,2,3,...,N},每个样本x都会有一个标签y,注意x不是一个单独的值,而是具有一系列特征的d维向量,y就是我们要分的类别,可以是一个值,也可以是多个值,就像鞋子可以分为运动鞋和非运动鞋,也可以分为老年鞋和非老年鞋。

我们的目的就是建立一个模型 f : R d → R K f:R^d{\rightarrow}R^K f:RdRK,K代表种类数,输入的是d维的向量,经过f的映射后,输出在各个分类上的概率分布 P ( Y ∣ x i ) = f ( x i ; θ ) P(Y|x_i)=f(x_i;{\theta}) P(Yxi)=f(xi;θ)翻译成人话:就是算出这个鞋有多大概率属于运动鞋,有多大概率属于老年鞋)。这样可以取最大概率的作为结果,即 y i ∗ = a r g m a x ( P ( Y ∣ x i ) ) y^*_i=argmax(P(Y|x_i)) yi=argmax(P(Yxi))(翻译成人话:如果运动鞋概率更大,我们就认为它是运动鞋)。

如何判断分类模型的好坏?

很简单,我们比较一下我们预测的结果跟实际结果的差别就可以了,如果能对大部分样本进行有效的预测,那我们的模型肯定没有问题。如何衡量这个差别呢?那就是用损失函数进行预测。

**损失函数(loss function)**通常用 L ( y , f ( x ; θ ) ) L(y,f(x;{\theta})) L(y,f(x;θ))来表示,y代表实际的结果, f ( x i ; θ ) f(x_i;\theta) f(xi;θ)代表我们预测的结果,我们会通过不停的训练,不停的调整 θ \theta θ的值,让损失函数最小,当损失函数最小时,我们也就得到了 θ \theta θ的最优值,这时的 f ( x i ; θ ) f(x_i;\theta) f(xi;θ)也就是我们使用的模型的最优情况,我们可以通过测量不同模型的最优的 θ \theta θ来判断哪种模型更贴切。求最优 θ \theta θ的过程被称为优化求解。这个过程可以用下式表示:

θ ∗ = a r g m i n [ 1 N ∑ i = 1 N L ( y i , f ( x i ; θ ) ) + λ ϕ ( θ ) ] {\theta}^*=argmin[\frac{1}{N}{\sum_{i=1}^N}L(y_i,f(x_i;\theta))+\lambda\phi(\theta)] θ=argmin[N1i=1NL(yi,f(xi;θ))+λϕ(θ)]

后面的 ϕ \phi ϕ表示的是正则化项(regularizer)或者说是惩罚项(penalty term),这个以后再进行详细解释。

在实际优化中,我们会不断进行迭代,直到最终的 θ \theta θ不再变化或者变化缓慢即可,这种情况下我们就说该模型已经收敛了。

过拟合现象:就是指我们的模型能完美符合训练集中的数据,但是对新样本的数据拟合情况十分糟糕,这种情况就是过拟合。正则化项就是为了解决过拟合现象而提出的。

常见的损失函数

1.平方损失函数

L ( y , f ( x ; θ ) ) = 1 N ∑ i = 1 N ( y i − f ( x i ; θ ) ) 2 L(y,f(x;\theta))=\frac{1}{N}\sum_{i=1}^{N}(y_i-f(x_i;\theta))^2 L(y,f(x;θ))=N1i=1N(yif(xi;θ))2

其中N是样本数量,常用于回归问题。

2.交叉熵损失

常用于分类问题,这个不过多解释了,可以去查一下熵的概念和定义。在离散情况下用的比较多,器形式如下:

L ( y , f ( x ) ) = H ( p , q ) = − 1 N ∑ i = 1 N p ( y i ∣ x i ) l o g [ q ( y i ^ ∣ x i ) ] L(y,f(x))=H(p,q)=-\frac{1}{N}\sum_{i=1}^{N}p(y_i|x_i)log[q(\hat{y_i}|x_i)] L(y,f(x))=H(p,q)=N1i=1Np(yixi)log[q(yi^xi)]

其中p代表真实分布,q代表模型预测的分布, p ( y i ∣ x i ) p(y_i|x_i) p(yixi)代表样本标签的真实分布。

梯度下降算法

梯度下降算法的原理

梯度下降是一种经典的方法,利用梯度信息,通过不断迭代调整参数来寻找合适的解。

对于一个多元函数 f ( x ) f(x) f(x)(x是多维向量),梯度是指其中每个自变量的偏导数构成的向量, f ′ ( x ) f'(x) f(x)表示

f ′ ( x ) = ∇ f ( x ) = [ ∇ f ( x 1 ) , . . . , ∇ f ( x n ) ] T f'(x)=\nabla{f(x)}=[\nabla{f(x_1)},...,\nabla{f(x_n)}]^T f(x)=f(x)=[f(x1),...,f(xn)]T

f ( x + △ x ) f(x+\triangle{x}) f(x+x)在x处泰勒展开可得:

f ′ ( x + △ x ) = f ( x ) + f ′ ( x ) T △ x + o ( △ x ) f'(x+\triangle{x})=f(x)+f'(x)^T{\triangle{x}}+o(\triangle{x}) f(x+x)=f(x)+f(x)Tx+o(x)

要使 f ( x + △ x ) < f ( x ) f(x+\triangle{x})<f(x) f(x+x)<f(x),忽略高阶项,就要 f ′ ( x ) T △ x < 0 f'(x)^T{\triangle{x}}<0 f(x)Tx<0,满足这个条件就可以让函数值变小,进一步

f ′ ( x ) T △ x = ∣ ∣ f ′ ( x ) T ∣ ∣ ⋅ ∣ ∣ △ x ∣ ∣ ⋅ c o s θ f'(x)^T\triangle{x}=||f'(x)^T||\cdot||\triangle{x}||\cdot{cos\theta} f(x)Tx=∣∣f(x)T∣∣∣∣△x∣∣cosθ

△ x = − α f ′ ( x ) \triangle{x}=-\alpha{f'(x)} x=αf(x),就可以让更新后的函数变小,因为这样的话向量刚好相反, α \alpha α是一个超参数,用于调整步长的。

算法的步骤
  1. 给求解参数赋个值,作为优化的起点
  2. 对所有样本进行预测,算出损失值
  3. 利用损失值进行求导,得到相应的梯度
  4. 基于梯度调整参数
  5. 重复2-4的过程,直到达到预期

For i=0,1,2,3,…,N

L i = L ( X ; f ( X ; θ i ) L_i=L(X;f(X;\theta_i) Li=L(X;f(X;θi)

∇ θ i = ∂ L i ∂ θ i = { ∇ θ i ( 0 ) , . . . , ∇ θ i ( k ) } \nabla{\theta_i}=\frac{\partial{L_i} }{\partial{\theta{_i}} }=\{ {\nabla{\theta_i^{(0)} } },...,{\nabla{\theta_i^{(k)} } }\} θi=θiLi={θi(0),...,θi(k)}

θ i + 1 = { θ i ( 0 ) − α ∇ θ i ( 0 ) , θ i ( k ) − α ∇ θ i ( k ) } \theta{_{i+1}}=\{ {\theta_i^{(0)}-\alpha{\nabla{\theta_i^{(0)} } } },{\theta_i^{(k)}-\alpha{\nabla{\theta_i^{(k)} } } }\} θi+1={θi(0)αθi(0),θi(k)αθi(k)}

随机梯度下降算法

上述算法在数据集较大时效率是比较低的,因为它的计算的数量以及处理的维度会特别大,会消耗大量的时间。像上述这种基于所有样本计算梯度值的算法叫做批梯度下降法(Batch Gradient Descent).

如果不使用全量的样本,而是选单个样本估计梯度,就能提高效率,而且这种方法的收敛性是可以保证的,这种方法叫随机梯度下降法(Stochastic Gradient Descent,SGD)。就是每次随机选一个样本进行计算,概率上来讲就是单个样本的梯度就是整个数据梯度的无偏估计,但由于不确定性,所以收敛速度会更慢。

改进的方法是每次选取多个样本进行计算。这种方法叫做小批量随机梯度下降(mini-batch,SGD)每次迭代选取的样本数量叫批大小(batch size)

基本算法同上,不在赘述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值