深度学习(2)回归问题

  • 一. 问题提出与解析
    • 1. Machine Learning
    • 2. Continuous Prediction
    • 3. Linear Equation
    • 4. With Noise?
    • 5. Find w′w'w′,b′b'b′
    • 6. Gradient Descent
  • 二. 回归问题实战
    • 1. 步骤
    • 2. Step1: Compute Loss
    • 3. Step2: Compute Gradient and update
    • 4. Step3: Set w=w′w=w'w=w′and loop
    • 5. 代码

一. 问题提出与解析

1. Machine Learning

  • make decisions
  • going left/right →\to→ discrete
  • increase/decrease →\to→ continuous

2. Continuous Prediction

  • fθ:x→yf_θ:x→yfθ​:x→y
  • x:inputdatax:input datax:inputdata
  • f(x):predictionf(x):predictionf(x):prediction
  • y:realdata,ground−truthy:real data,ground-truthy:realdata,ground−truth

3. Linear Equation

  • y=w*x+b
  • 1.567=w*1+b
  • 3.043=w*2+b

→\to→ Closed Form Solution

  • w=1.477
  • b=0.089

4. With Noise?

  • y=w*x+b+ϵ
  • ϵ ~ N(0,1)
  • 1.567=w*1+b+eps
  • 3.043=w*2+b+eps
  • 4.519=w*2+b+eps

  • →\to→
  • Y=(WX+b)

For Example

  • w?
  • b?

5. Find w′w'w′,b′b'b′

  • [(WX+b−Y)]2[(WX+b-Y)]^2[(WX+b−Y)]2
  • loss=∑i(w∗xi+b−yi)2loss=\sum_i{(w*x_i+b-y_i)^2}loss=∑i​(w∗xi​+b−yi​)2
  • MinimizelossMinimize\ lossMinimize loss
  • w′∗x+b′→yw'*x+b'→yw′∗x+b′→y

6. Gradient Descent

(1) 1-D
w′=w′−lr∗dydww'=w'-lr*\frac{dy}{dw}w′=w′−lr∗dwdy​

x′=x−0.005∗dydwx'=x-0.005*\frac{dy}{dw}x′=x−0.005∗dwdy​
可以看到,函数的导数始终指向函数值变大的方向,因此,如果要求losslossloss函数的极小值的话,就需要沿导数的反方向前进,即−lr∗dydw-lr*\frac{dy}{dw}−lr∗dwdy​,衰减因子lrlrlr的引入是为了防止步长变大,跨度太大。
(2) 2-D

Findw′,b′w',b'w′,b′

  • loss=∑i(w∗xi+b−yi)2loss=\sum_i{(w*x_i+b-y_i)^2}loss=∑i​(w∗xi​+b−yi​)2
  • 分别对w和b求偏导数,然后沿着偏导数的反向前进,即:
    • w′=w−lr∗∂loss∂ww'=w-lr*\frac{∂loss}{∂w}w′=w−lr∗∂w∂loss​
    • b′=b−lr∗∂loss∂bb'=b-lr*\frac{∂loss}{∂b}b′=b−lr∗∂b∂loss​
  • w′∗x+b′→yw'*x+b'→yw′∗x+b′→y

Learning Process

Loss surface

二. 回归问题实战

1. 步骤

(1) 根据随机初始化的w,x,b,yw,x,b,yw,x,b,y的数值来计算LossFunctionLoss\ FunctionLoss Function;
(2) 根据当前的w,x,b,yw,x,b,yw,x,b,y的值来计算梯度;
(3) 更新梯度,将w′w'w′赋值给www,如此往复循环;
(4) 最后面的w′w'w′和b′b'b′就会作为模型的参数。

2. Step1: Compute Loss

共有100个点,每个点有两个维度,所以数据集维度为[100,2][100,2][100,2],按照[(x0,y0),(x1,y1),…,(x99,y99)][(x_0,y_0 ),(x_1,y_1 ),…,(x_{99},y_{99} )][(x0​,y0​),(x1​,y1​),…,(x99​,y99​)]排列,则损失函数为:
loss=[(w0x0+b0−y0)]2+[(w0x1+b0−y1)]2+⋯+[(w0x99+b0−y99)]2loss=[(w_0 x_0+b_0-y_0)]^2+[(w_0 x_1+b_0-y_1)]^2+⋯+[(w_0 x_{99}+b_0-y_{99})]^2loss=[(w0​x0​+b0​−y0​)]2+[(w0​x1​+b0​−y1​)]2+⋯+[(w0​x99​+b0​−y99​)]2
即:
loss=∑i(w∗xi+b−yi)2loss=\sum_i(w*x_i+b-y_i)^2loss=i∑​(w∗xi​+b−yi​)2
初始值设w0=b0=0w_0=b_0=0w0​=b0​=0。

(1) b和w的初始值都为0,points是传入的100个点,是data.csv里的数据;
(2) len(points)就是传入数据点的个数,即100; range(0, len(points))就代表从0循环到100;
(3) x=points[i, 0]表示取第i个点中的第0个值,即第一个元素,相当于p[i][0]; 同理,y=points[i, 1]表示取第i个点中的第1个值,即第二个元素,相当于p[i][1];
(4) totalError为总损失值,除以是len(points)是平均损失值。

3. Step2: Compute Gradient and update

loss0=(wx0+b−y0)2loss_0=(wx_0+b-y_0)^2loss0​=(wx0​+b−y0​)2
∂loss0∂w=2(wx0+b−y0)x0\frac{∂loss_0}{∂w}=2(wx_0+b-y_0)x_0∂w∂loss0​​=2(wx0​+b−y0​)x0​
∂loss∂w=2∑(wxi+b−yi)xi\frac{∂loss}{∂w}=2\sum(wx_i+b-y_i)x_i ∂w∂loss​=2∑(wxi​+b−yi​)xi​
∂loss∂b=2∑(wxi+b−yi)\frac{∂loss}{∂b}=2\sum(wx_i+b-y_i)∂b∂loss​=2∑(wxi​+b−yi​)
w′=w−lr∗∂loss∂ww'=w-lr*\frac{∂loss}{∂w}w′=w−lr∗∂w∂loss​
b′=b−lr∗∂loss∂bb'=b-lr*\frac{∂loss}{∂b}b′=b−lr∗∂b∂loss​

4. Step3: Set w=w′w=w'w=w′and loop

w←w′w←w'w←w′
b←b′b←b'b←b′

计算出最终的w和b的值就可以带入模型进行预测了:
w′x+b′→predictw' x+b'→predictw′x+b′→predict

5. 代码

import numpy as np# y = wx + b
def compute_error_for_line_given_points(b, w, points):totalError = 0for i in range(0, len(points)):x = points[i, 0]y = points[i, 1]# computer mean-squared-errortotalError += (y - (w * x + b)) ** 2# average loss for each pointreturn totalError / float(len(points))def step_gradient(b_current, w_current, points, learningRate):b_gradient = 0w_gradient = 0N = float(len(points))for i in range(0, len(points)):x = points[i, 0]y = points[i, 1]# grad_b = 2(wx+b-y)b_gradient += (2 / N) * ((w_current * x + b_current) - y)# grad_w = 2(wx+b-y)*xw_gradient += (2 / N) * x * ((w_current * x + b_current) - y)# update w'new_b = b_current - (learningRate * b_gradient)new_w = w_current - (learningRate * w_gradient)return [new_b, new_w]def gradient_descent_runner(points, starting_b, starting_w, learning_rate, num_iterations):b = starting_bw = starting_w# update for several timesfor i in range(num_iterations):b, w = step_gradient(b, w, np.array(points), learning_rate)return [b, w]def run():points = np.genfromtxt("data.csv", delimiter=",")learning_rate = 0.0001initial_b = 0  # initial y-intercept guessinitial_w = 0  # initial slope guessnum_iterations = 1000print("Starting gradient descent at b = {0}, w = {1}, error = {2}".format(initial_b, initial_w,compute_error_for_line_given_points(initial_b, initial_w, points)))print("Running...")[b, w] = gradient_descent_runner(points, initial_b, initial_w, learning_rate, num_iterations)print("After {0} iterations b = {1}, w = {2}, error = {3}".format(num_iterations, b, w,compute_error_for_line_given_points(b, w, points)))if __name__ == '__main__':run()

运行结果如下:

可以看到,在w=0,b=0w=0,b=0w=0,b=0的时候,损失值error≈5565.11error≈5565.11error≈5565.11;
在1000轮迭代后,w≈1.48,b≈0.09w≈1.48,b≈0.09w≈1.48,b≈0.09,损失值error≈112.61error≈112.61error≈112.61,要大大小于原来的损失值。

参考文献:
[1] 龙良曲:《深度学习与TensorFlow2入门实战》

深度学习(2)回归问题相关推荐

  1. 电气论文实现:深度学习分位数回归实现电力负荷区间预测

    个人电气博文目录链接:学好电气全靠它,个人电气博文目录(持续更新中-) 之前写过一版电力负荷区间预测:电气论文:负荷区间预测(机器学习简单实现) 这版区间负荷预测思维和上一版不一样. 核心代码见图(无 ...

  2. 深度学习pytorch--softmax回归(三)

    softmax回归的简洁实现 获取和读取数据 定义和初始化模型 softmax和交叉熵损失函数 定义优化算法 模型评价 训练模型 小结 完整代码 前两篇链接: 深度学习pytorch–softmax回 ...

  3. 深度学习pytorch--softmax回归(二)

    softmax回归的从零开始实现 实验前思考 获取和读取数据 获取数据集 查看数据集 查看下载后的.pt文件 查看mnist_train和mnist_test 读取数据集 查看数据迭代器内容 初始化模 ...

  4. 深度学习pytorch--softmax回归(一)

    softmax回归 前几节介绍的线性回归模型适用于输出为连续值的情景.在另一类情景中,模型输出可以是一个像图像类别这样的离散值.对于这样的离散值预测问题,我们可以使用诸如softmax回归在内的分类模 ...

  5. 深度学习利用回归算法进行数据预测

    机床加工过程中,因热变形产生的热误差占机床加工总误差的40%-70%.热误差值补偿是解决热误差的主流技术,如何将神经网络建模与热误差值预测结合起来,是今天介绍的重点. 本项目研究对象为立式数控加工中心 ...

  6. 深度学习-softmax回归

    softmax regression 1- softmax 基本概念 1-1 极大似然估计 2- Fashion-MNIST图像分类数据集 2-1 下载数据集 2-2 可视化 3- softmax回归 ...

  7. 【深度学习】回归任务评价方法(MSE、MAE、RMSE)

    概念 在回归(Regression)方法中,我们预测一系列连续的值,在预测完后需要评价预测结果的好坏.关于这个评价标准,目前学术界有多种标准.在深度学习中最常见的是 MSE和 MAE. 对照表 评价方 ...

  8. 马毅教授讲座——反思深度学习:回归计算机视觉的挑战

    7月3日,清华伯克利深圳学院暑期课程开课,邀请到加州大学伯克利分校电子工程与计算机系, ACM.IEEE Fellow,马毅教授为大家展开为期两周的<压缩感知和稀疏模型>的课程. 开课的第 ...

  9. 神经网络与深度学习:回归问题

    回归问题 1.机器学习基础 1.1监督学习 1.2无监督学习 1.3半监督学习 2.一元线性回归 3.解析法实现一元回归 3.1 Python实现 3.2 NumPy实现 3.3 TensorFlow ...

  10. Datawhale 7月学习——李弘毅深度学习:回归

    前情回顾 机器学习简介 1 回归模型 1.1 回归的概念及例子 回归(Regression)的意思就是找到一个函数 functionfunctionfunction ,通过输入特征 xxx,输出一个数 ...

最新文章

  1. 中科院微生物所王军课题组特别研究助理招聘
  2. 清华大学教授:唐杰——深度分析:人工智能的下个十年
  3. Binder学习指南
  4. java 文件下载漏洞,文件上传和下载漏洞
  5. 计算机操作员可以免考自考吗,计算机《职业资格证书》可以免考高
  6. 图像处理与图像识别笔记(三)图像增强1
  7. 小学四则运算结对项目报告(GUI)
  8. abaqus推荐用哪一版本的_ABAQUS推荐资料合集(一)
  9. easyui tree 默认选中第一个元素
  10. 这两天测试软件发现的问题
  11. kotlin使用spring data jpa(三)
  12. 【Java 8 in Action】Stream
  13. HDLBit Exams/ece241 2014 q3
  14. Greek Gods,Roman Gods and Chinese Gods
  15. python greedy 加油次数
  16. Mysql事务隔离级别和锁机制(间隙锁、临建锁)
  17. FLASH抽象层(FAL)程序的应用(rt-thread)
  18. html画布动漫人物,canvas画布画卡通人物--哆啦A梦
  19. Private VLAN 与Switchport Protected
  20. 华为海思芯片 网口烧录详解(翻遍全网资料 结合实际成功操作)

热门文章

  1. java代码杨辉三角_用java实现杨辉三角的示例代码
  2. 安卓 spinner下拉框 做模糊查询_想做短视频不知道用什么工具?11个免费制作工具收藏起来...
  3. python中什么是实例-在Python中使用’__rsub__’方法的典型实例是什么?
  4. Android开发之6.0动态权限工具类(高德地图官方扣出来的)附源码
  5. linux 流量 脚本,linux 检测网络出入流量 当达到一定量时 自动执行另一个脚本。...
  6. 计算机桌面组成部分教案,计算机基础 教案设计(完整版).doc
  7. 微信小程序错误监控方法谈
  8. 来自东软的 OpenStack 负载均衡即服务开源项目
  9. android ListView 刷新卡顿问题
  10. git忽略文件【转】