Tensorflow入门:机器学习简介和线性回归问题

机器学习简介

机器学习使用统计方法从有限的观测数据中(训练数据集)学习出具有一般性的规律(建立映射关系或者找出条件概率分布),并将其在未观测样本(测试集)上进行验证。我们把机器学习方法分为三个基本要素:模型,学习法则以及优化算法。
bref intro

机器学习算法分类

监督学习spuervised learning
如果机器学习目标是建立输入和输出之间的对应关系,并且数据集提供每个样本的输出示例作为标签,这种机器学习则称为监督学习,目的是对给定的输入能够给出有效预测。常见的监督学习有线性回归,逻辑回归,支持向量机,随机森林等。监督学习细分为三种:回归问题分类问题结构化学习问题
回归问题中的标签输出是连续值,因此所拟合的对应关系的输出也是连续值。分类问题中的标签输出是离散值,其中一种特殊的分类问题称为结构化学习。结构化学习输出的标签是结构化的对象,比如序列树和图等等,解码过程通常使用动态规划的方法。

无监督学习unsupervised learning
无监督学习提供的样本不包括目标标签,期望从训练样本中提炼一些有价值的信息和找到内在的规律。常见的两大类算法为聚类降维,目前的研究与应用尚有很大的局限性。已经落地的应用场景有图片风格模仿,发现异常信息,推荐系统,用户群体画像。常见的无监督学习算法有自编码器,生成对抗网络等。

强化学习reinforcement learning
强化学习中根据环境的状态做出动作,并得到即时或者延时的奖励。在交互学习过程中不断调整策略以期获得最大化的奖励。常见的两大类主流算法是马尔可夫决策链以及动态规划。比较典型的应用就是各种游戏的ai开发,机器人领域以及自动驾驶。常见的强化学习算法有 DQN,PPO 等。

机器学习大体分类

机器学习的模型

对于给定样本进行机器学习任务,首先要确定其输入空间 X X X和输出空间 Y Y Y。不同的机器学习任务的输出空间不同,分类问题中输出空间为 Y = { 1 , 2 , . . . , C } Y = \{1,2,...,C\} Y={1,2,...,C},而回归问题中输出空间为 Y = R Y=\mathbb{R} Y=R。问题转化为在样本空间 ( x , y ) ∈ X × Y (\boldsymbol x ,y)\in X\times Y (x,y)X×Y中寻找映射关系 y = f ( x ) y=f(\boldsymbol x) y=f(x)或者条件概率分布 p r ( y ∣ x ) p_r(y|\boldsymbol x) pr(yx)。输入输出的对应关系存在于一个参数化的函数族作为假设空间 F = { f ( x ; θ ) ∣ θ ∈ R D } \mathscr{F} = \{f(\boldsymbol x;\theta)|\theta \in \mathbb{R}^D\} F={f(x;θ)θRD}中,透过观测在训练集 D \mathscr{D} D上的特性拟合一个理想假设 f ∗ ∈ F f^* \in \mathscr{F} fF。其中 f ( x ; θ ) f(\boldsymbol x;\theta) f(x;θ)是参数为 θ \theta θ的函数, D D D为参数的维度。

这里函数族假设空间分为线性非线性两种,即为线性模型和非线性模型,后者是非线性基函数线性组合而来的。
线性模型:
f ( x ; θ ) = w T x + b f(\boldsymbol x;\theta) = \boldsymbol w^T \boldsymbol x +b f(x;θ)=wTx+b
非线性模型:
f ( x ; θ ) = w T ϕ ( x ) + b f(\boldsymbol x;\theta) = \boldsymbol w^T \boldsymbol{\phi}(\boldsymbol x)+b f(x;θ)=wTϕ(x)+b
其中 θ \theta θ包含权重向量 w \boldsymbol w w和偏移 b b b ϕ ( x ) \boldsymbol \phi(\boldsymbol x) ϕ(x)为非线性方程(组)且当其本身为可学习的基函数时该模型等价于神经网络

机器学习的学习准则

建立模型训练之初需要给定一个衡量标准以评价模型的好坏,这里提出期望风险Expected Risk来衡量:
R ( θ ) = E ( x , y ) / P r ( x , y ) [ L ( y , f ( x ; θ ) ) ] \mathcal{R}(\theta) = \mathbb{E}_{(\boldsymbol x,y)/P_r(\boldsymbol x,y)}[\mathcal L(y,f(\boldsymbol x;\theta))] R(θ)=E(x,y)/Pr(x,y)[L(y,f(x;θ))]

其中 p r ( x , y ) p_r(\boldsymbol x,y) pr(x,y)为真实的数据分布, L ( y , f ( x ; θ ) ) \mathcal L(y,f(\boldsymbol x;\theta)) L(y,f(x;θ))为损失函数来衡量标签和训练模型的预测之间的差异。

关于损失函数:主要选择两种损失函数,在输出为连续值时选择平方损失函数Quadratic Loss Function,在输出值为离散值时选择交叉熵损失函数Cross-Entropy Loss Function:
L ( y , f ( x ; θ ) ) = 1 2 ( y − f ( x ; θ ) ) 2 \mathcal L(y,f(\boldsymbol x;\theta)) = \frac{1}{2}(y-f(\boldsymbol x;\theta))^2 L(y,f(x;θ))=21(yf(x;θ))2
L ( y , f ( x ; θ ) ) = − l o g f y ( x ; θ ) \mathcal L(y,f(\boldsymbol x;\theta)) = -logf_y(\boldsymbol x;\theta) L(y,f(x;θ))=logfy(x;θ)

本节初给出的期望风险本质上因为不了解真实的数据分布和映射函数,并没有方法可以计算。实际操作上,在给定的训练集上计算平均损失作为经验风险Empirical Risk。此处我们的学习准则可以代替定义为经验风险最小化准则。

R D e m p ( θ ) = 1 N ∑ n = 1 N L ( y ( n ) , f ( x ( n ) ; θ ) ) \mathcal R_{\mathscr D}^{emp}(\theta) = \frac{1}{N}\sum_{n=1}^N\mathcal L(y^{(n)},f(\boldsymbol x^{(n)};\theta)) RDemp(θ)=N1n=1NL(y(n),f(x(n);θ))

过拟合问题:在以经验风险为衡量标准最优化模型的同时,会发现因为样本的有限或含有噪音等等会导致在训练集上表现优于测试集。为了解决这一问题,再引入参数正则化来限制模型的能力,控制最小化经验风险的程度,即为结构风险最小化准则。

θ ∗ = arg min ⁡ θ R D e m p ( θ ) + 1 2 λ ∣ ∣ θ ∣ ∣ 2 \theta^* = {\underset {\theta}{\operatorname {arg\,min} }}\mathcal R_{\mathscr D}^{emp}(\theta)+\frac{1}{2}\lambda||\theta||^2 θ=θargminRDemp(θ)+21λθ2

优化算法

对于给定的训练集,假设空间和学习准则,机器学习的过程就是求解最优模型。在模型中需要优化的参数有两种类别:参数超参数。参数是指模型 f ( x ; θ ) f(\boldsymbol x;\theta) f(x;θ)中的 θ \theta θ,而超参数指定义模型结构和优化策略的上层尺度的参数。常见的超参数包括:聚类算法中的类别个数,梯度下降中的步长,正则化项的系数,神经网络的层数,支持向量机中的核函数等。超参数的调优偏向组合优化等方法,依赖经验设定或搜索试错而不是优化算法自动学习。

最常用的优化算法就是梯度下降法:给定初始参数, θ 0 \theta_0 θ0,计算每步的梯度并向减少的方向迭代以期收敛。这里的梯度下降法缺点是当一些模型是非凸函数的情况下容易停留在局部最优。给出的迭代算法的公式如下:

θ t + 1 = θ t − α ∂ R D ( θ ) ∂ θ \theta_{t+1} = \theta_t -\alpha \frac{\partial \mathcal R_{\mathscr D}(\theta)}{\partial \theta} θt+1=θtαθRD(θ)

几种优化梯度下降的算法,除了之前的加正则项防止过拟合以外,还包括提前停止随机梯度下降法以及小批量梯度下降法。提前停止需要我们在测试集以外单独划分一个验证集,当在测试验证集上的错误率不再下降时就停止迭代,防止机器学习的模型针对给定的测试集特化而在泛化的情况下误差变大。随机梯度下降法的提出背景是当在训练集样本过大时,求解整个训练集上所有样本的梯度再平均的空间复杂度将会非常大,此时随机取样一个样本来代替所有样本进行梯度计算会大大加快迭代速度。小批量梯度下降法则是两者的折中:随机取样一批样本进行梯度计算,可以达到计算效率和取样样本代表性的折中。

线性回归

回归分析在统计中指通过大量数据来确定自变量和因变量关系,来建立一个相关性回归方程,用以预测今后因变量变化的分析方法。除开线性回归/linear regression,还有逻辑回归/logistic regression,多项式回归/polynomial regression等其他各种方法。线性回归因为与神经元的结构相似而在机器学习中被强调使用。
神经元模型

图中的神经元输入 x = [ x 0 , x 1 , x 2 , ⋯   , x n ] \boldsymbol{x} = [x_0, x_1, x_2, \cdots ,x_n] x=[x0,x1,x2,,xn],经过函数映射 f θ : x ⟶ y f_{\theta}:\boldsymbol{x}\longrightarrow y fθ:xy的线性变换成为 y y y(其中 θ \theta θ为函数 f θ f_{\theta} fθ的参数):

f ( x ) = w T x + b f( \boldsymbol{x} ) = \boldsymbol{w}^T \boldsymbol{x} + b f(x)=wTx+b

线性回归的问题即为根据给定的统计结果取得最合适的参数值来获得对输入的最优预测。此处衡量误差的损失函数通常情况下选择最小二乘法,即为选择点到直线的 L 2 L^2 L2范数作为误差衡量拟合品质。其他的方法有最小绝对值法,最小方差法等。

e r r = 1 n ∑ i = 1 n ( w x ( i ) + b − y ( i ) ) 2 err = \frac{1}{n} \sum_{i=1}^{n} (wx^{(i)}+b-y^{(i)})^2 err=n1i=1n(wx(i)+by(i))2

数学表述即为:
w ∗ , b ∗ = arg min ⁡ w , b 1 n ∑ i = 1 n ( w x ( i ) + b − y ( i ) ) 2 w^* ,b^* = {\underset {w,b}{\operatorname {arg\,min} }}\frac{1}{n}\sum_{i=1}^{n}(wx^{(i)}+b-y^{(i)})^2 w,b=w,bargminn1i=1n(wx(i)+by(i))2
这里可以通过求梯度等于零的点给出一个最小误差的参数取值:

∂ L ∂ w = 2 n ∑ i = 1 n [ w x i 2 + x i ( b − y i ) ] = 0 \frac{\partial L}{\partial w} = \frac{2}{n} \sum_{i=1}^{n}[wx_i^2+x_i(b-y_i)]=0 wL=n2i=1n[wxi2+xi(byi)]=0

∂ L ∂ b = 2 n ∑ i = 1 n ( w x i + b − y i ) = 0 \frac{\partial L}{\partial b} = \frac{2}{n}\sum_{i=1}^{n}(wx_i+b-y_i) =0 bL=n2i=1n(wxi+byi)=0

可以求出:

w = ∑ i = 1 n y i ( x i − x ˉ ) ∑ i = 1 n x i 2 − 1 n ∑ i = 1 n x i 2 w=\frac{\sum_{i=1}^{n}y_i(x_i-\bar{x})}{\sum_{i=1}^{n}x_i^2-\frac{1}{n}\sum_{i=1}^{n}x_i^2} w=i=1nxi2n1i=1nxi2i=1nyi(xixˉ)

b = 1 n ∑ i = 1 n ( y i − w x i ) b =\frac{1}{n}\sum_{i=1}^{n}(y_i-wx_i) b=n1i=1n(yiwxi)

这是一个解析解,除此以外还有机器学习里通用的数值解的方法:梯度下降法。梯度Gradient定义是函数对各个自变量的偏导数的向量,利用梯度迭代运算求极值的方法如下:

w i + 1 = w i − η ∂ L ∂ w \boldsymbol w_{i+1} = \boldsymbol w_i - \eta \frac{\partial L}{\partial \boldsymbol w} wi+1=wiηwL

b i + 1 = b x i − η ∂ L ∂ b b_{i+1} = b x_i - \eta \frac{\partial L}{\partial b} bi+1=bxiηbL

此处 η \eta η用于缩放梯度向量,一般设置为较小的步数如0.01,决定迭代收敛的速度快慢。在给出的问题中,确定一组初始的参数 ( w ∗ , b ∗ ) (\boldsymbol w^*,b^*) (w,b)然后进行梯度下降的迭代求出空间内的最值。式中的梯度与最小二乘法中给出的表达式相同,理想状况下期望一样在零初收敛停止,实际取极小的值停止迭代以期最优效率。

给出一个简单的梯度下降计算线性回归的示例代码:

#A simple example for linear regression in tensorflow
import tensorflow as tf # 导入 TF 库

#create a linear model with bias
sample_number = 100
x = tf.random.uniform([sample_number],minval=-10.,maxval=10.)
eps = tf.random.normal([sample_number],mean=0.,stddev=0.01) #bias noise
w = tf.Variable([1.677],name="weight")
b = tf.Variable([0.318],name="bias")
y = x*w + b +eps # y = w*x + b + bias

#set variables, initial values for iterations
W = tf.Variable(0.0,name="para_1")
B = tf.Variable(0.0,name="para_2")


#algorithm is to minimize variance,loss function and GradientDescentOptimizer
def cost():
    y_model = x*W + B
    error = tf.keras.losses.MSE(y,y_model)
    return error
train_model = tf.keras.optimizers.SGD(0.01)

#train 201 times and print result every 20 steps
train_steps = 201
for step in range(0,train_steps):
    train_model.minimize(cost,var_list =[W,B])
    if step % 20 ==0:
        print(step,W,B)

损失函数我们选择了MSE,即均方误差。其中要注意的是,GradientDescentOptimizer()函数已经在tf2中被optimizer.SGD()所代替。minimize()函数只执行一次迭代并且输入的参数中loss应该是一个函数形式(可以写成lambda函数),第二个输入的参数var_list为我们期望优化的模型参数。这个函数等效为GradientTape加处理梯度值加apply_gradients,可以参照官网说明手动编写这一步的代码。

输出结果:
output

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值