在正式开始进行神经网络建模之前,我们还需要掌握一些基本数学工具,在PyTorch中,最核心的基础数学工具就是梯度计算工具,也就是PyTorch的AutoGrad(自动微分)模块。虽然对于任何一个通用的深度学习框架,都会提供许多自动优化的算法和现成的loss function,PyTorch也不例外,但如果希望能够更深入的理解神经网络、希望对深度学习的建模不仅仅停留在调包和调参的层次,那我们就必须深入一些数学领域、掌握一些数学工具,从底层提升自己的数学能力,以期能够在日后的使用深度学习算法的过程中能够更加灵活的解决问题、取得更好的建模效果。而AutoGrad模块,就是PyTorch提供的最核心的数学工具模块,我们可以利用其编写一系列的最优化方法,当然,要使用好微分工具,就首先需要了解广泛应用于机器学习建模的优化思想。
  所谓优化思想,指的是利用数学工具求解复杂问题的基本思想,同时也是近现代机器学习算法在实际建模过程中经常使用基础理论在实际建模过程中,我们往往会先给出待解决问题的数值评估指标,并在此基础之上构建方程、采用数学工具、不断优化评估指标结果,以期达到可以达到的最优结果。本节,我们将先从简单线性回归入手,探讨如何将机器学习建模问题转化为最优化问题,然后考虑使用数学方法对其进行求解。

import numpy as np
import torch

一、简单线性回归的机器学习建模思路

  在《Lesson 4.张量的线性代数运算》结尾,我们曾简单提及线性方程建模问题,彼时,我们将线性回归问题转化成,求解以线性方程系数为核心目标的线性方程组求解问题,并且将方程组转化为矩阵表示形式,最终使用逆矩阵的方法解出线性方程系数。线性回归是较为基础且通用的模型,但使用矩阵方法求解却不是一般方法。
  接下来,我们将更进一步,将简单线性回归的求解参数问题转化为最优化问题求解问题,这也是机器学习建模过程中的最通用的思想。

1.回顾简单线性回归建模问题

import matplotlib as mpl
import matplotlib.pyplot as pltA = torch.arange(1, 5).reshape(2, 2).float()
A
#tensor([[1., 2.],
#        [3., 4.]])# 绘制点图查看两个点的位置
plt.plot(A[:,0], A[:, 1], 'o')

结果:

如果更进一步,我们希望在二维空间中找到一条直线,来拟合这两个点,也就是所谓的构建一个线性回归模型,我们可以设置线性回归方程如下:

2.转化为优化问题

  上述问题除了可以使用矩阵方法求解以外,还可以将其转化为最优化问题,然后通过求解最优化问题的方法对其进行求解。总的来说,最优化问题的转化分为两步,其一是确定优化数值指标,其二则是确定优化目标函数。在大多数问题中,这二者是相辅相成的,确定了优化的数值指标,也就确定了优化的目标函数。

  如果我们希望通过一条直线拟合二维平面空间上分布的点,最核心的目标,毫无疑问,就是希望方程的预测值和真实值相差较小。假设真实的y值用y表示,预测值用ŷ表示,带入a、b参数,则有数值表示如下:

而这两个预测值和真实值相差:

我们希望ŷ和y尽可能接近,因此我们可以考虑计算上述误差总和,但为了避免正负相消(一部分为正、另一部分为负),在衡量上述两个点的误差总和时,我们使用平方和来进行衡量,而不是简单的求和:

  上式也就是两个点的预测值和真实值的差值的平方和,也就是所谓的,误差平方和——SSE(Sum of the Squared Errors)。

当然,此处我们只带入了(1, 2)和(3, 4)两个点来计算SSE,也就是带入了两条数据来训练y = ax + b这个模型。

不难发现,很多时候,机器学习的思想都是相对比较朴素的,很多看似复杂的概念,出发点都是一个非常“简单”的想法,在学习机器学习的过程中,掌握其底层的朴素思想,能够帮助大家在很多场景下活学活用。

  至此,我们已经将原问题转化为了一个最优化问题,接下来我们的问题就是,当a、b取何值时,SSE取值最小?值得注意的是,SSE方程就是我们优化的目标方程(求最小值),因此上述方程也被称为目标函数,同时,SSE代表着真实值和预测值之间的差值(误差平方和),因此也被称为损失函数(预测值距真实值的损失)。

换而言之,就是当SSE取值最小时,a、b的取值,就是最终线性回归方程的系数取值。

值得注意的是,目标函数和损失函数并不完全等价,但大多数目标函数都由损失函数构成。

3.最优化问题的求解方法

  在机器学习领域,大多数优化问题都是围绕目标函数(或者损失函数)进行求解。在上述问题中,我们需要围绕SSE求最小值。SSE是一个关于a和b的二元函数,要求其最小值,需要借助数学工具,也就是所谓的最优化方法。选择优化方法并执行相应计算,可以说是整个建模过程中最核心也是相对较难的部分,很多时候这个过程会直接决定模型的性能。

  • 图形展示目标函数

  为了更好的讨论目标函数(SSE)求最小值的过程,对于上述二元函数来说,我们可以将其展示在三维空间内。此处我们可以使用Python中matplotlib包和Axes3D函数进行三维图像绘制

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3Dx = np.arange(-1,3,0.05)
y = np.arange(-1,3,0.05)
a, b = np.meshgrid(x, y)
SSE = (2 - a - b) ** 2 + (4 - 3 * a - b) ** 2ax = plt.axes(projection='3d')ax.plot_surface(a, b, SSE, cmap='rainbow')
ax.contour(a, b, SSE, zdir='z', offset=0, cmap="rainbow")  #生成z方向投影,投到x-y平面
plt.show()

结果:

  • 函数的凹凸性

  初步探索函数图像,不难看出,目标函数是个整体看起来“向下凸”的函数,函数的凹凸性是函数的重要性质,首先我们给出凸函数的一般定义,对于任意一个函数,如果函数f(x)上存在任意两个点,

Lesson 5.基本优化思想与最小二乘法相关推荐

  1. pytorch学习——基本优化思想与最小二乘法

    一.机器学习建模一般流程 Step 1:提出基本模型 例如线性回归.神经网络模型等. Step 2:确定损失函数和目标函数 围绕建模的目标,我们需要合理设置损失函数,并在此基础之上设置目标函数,当然, ...

  2. Unity3d--基于对象池优化思想的音频管理系统

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Resource文件夹下的音效片段目录 二.采用单例模式作为全局访问方式 三.音效类型分类 四.播放音效的组件池的 ...

  3. mysql 复杂行转列_有趣的SQL(四) 行转列的复杂应用和优化思想

    原标题:有趣的SQL(四) 行转列的复杂应用和优化思想 导读 本文节选自松华老师<SQL优化专栏> 大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子 在之前的的系列文章:有趣的SQL ...

  4. mysql架构设计书籍推荐_最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这...

    摘要: 冲区才用缓冲区,即SQL_CACHE:sort_buffer_size:排序缓冲区.3)分库分表因为数据库压力过大,首先一个问题就是高峰期系统性能可能会降低,因为数据库负载过高对性能会有影响. ...

  5. 最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这

    优化一览图 优化 笔者将优化分为了两大类:软优化和硬优化.软优化一般是操作数据库即可:而硬优化则是操作服务器硬件及参数设置. 1.软优化 1)查询语句优化 首先我们可以用EXPLAIN或DESCRIB ...

  6. 3D点云处理:拟合平面_优化后的最小二乘法

    文章目录 0. 拟合效果 1. 论文:一种稳健的点云数据平面拟合方法 1.1 优化过程 2. 参考 关联内容: 3D点云处理:拟合平面_最小二乘法_1 0. 拟合效果 左(拉格朗日乘子法求解)中(SV ...

  7. sql语句查询性能的优化思想(个人理解)

    我对sql语句优化的理解,从以下四个方面入手: 1.改写SQL: 2.调整数据库或者系统的参数. 3.调整表结构: 4.建索引. 后续会继续完善的^-^ 转载于:https://blog.51cto. ...

  8. 前端解密后台加密算法优化思想

    场景 记一次加解密算法优化过程. 实现 1.开始 后台查询出所有数据,并循环对所有的字段进行加密, 在前段循环对所有字段进行循环解密. 2.一次优化 后台只对关键字段进行加密,前段只对关键字段进行解密 ...

  9. mysql 复杂行转列_有趣的SQL(4) 行转列的复杂应用和优化思想

    大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子 在之前的的系列文章中,有意思的SQL(3) 行转列,列转行和复制 已经给大家介绍了,行转列,列转行,复制等方法. 在这篇文章中,对其进行更深一层 ...

最新文章

  1. 简明 Vim 练级攻略(转)
  2. postman发送json请求,使用案例
  3. 【强化学习】数据科学,从计算到推理
  4. SAP,IBM,AC实施之比较
  5. vue2.0 -- watch监听
  6. 为爱追寻_从机械师到编码员:追寻梦想如何改变了我的生活
  7. 大数据分析机器学习(一)之线性模型-年龄和心率关系
  8. 潜艇大战java代码_java潜艇大战游戏源码项目
  9. mysql根据外键多条件查询_MySQL练习-主外键多表查询
  10. 博图能打开s7200吗_透明胶真的能把车窗打开吗?现场实验给你看,能成功吗?...
  11. 数组及对象几种遍历方式对比
  12. springboot缓存注解——@Cacheable和@CacheConfig
  13. 新浪邮箱文件下载php,免费邮箱大全收集-国内篇
  14. Post 页面数据,使用boundary来格式化
  15. 【Python计量】statsmodels对虚拟变量进行回归
  16. python导入mysqldb_Python导入MySQLdb库
  17. 悟空在哪里?奶妈在哪里?
  18. Python实现车牌摇号小程序
  19. 绝对干货:微信小程序有哪些模式能够让你快速盈利?
  20. linux inode使用率过高,解决inode占用过多

热门文章

  1. linux指令笔试,Linux笔试常用命令
  2. linux 的ip 设置lo_linux网络虚拟化: network namespace 简介及实验
  3. 七骑士android版上线时间,腾讯独代韩手游《七骑士》今日全面公测
  4. for循环java_java的这三种for循环有什么区别?
  5. 定点数的编码表示方法
  6. java mkfifo_在Java中创建命名管道
  7. pytorch运行遇到的问题_如何解决吸塑机在运行中遇到真空度的问题
  8. 添加softmax层_PyTorch入门之100行代码实现softmax回归分类
  9. matlab去除坏点,图像处理之坏点校正及源码实现
  10. OpenCV-Python Feature2D 特征点检测 (SIFT,SURF)