【李宏毅机器学习笔记(一)】关于机器学习的定义和过程初步推导

定义:机器学习寻找一个函数

类型:

①regression:输出为一个数值(eg.预测)

②classification:从给定的选择中选择一个输出(eg.分类、判断)

③structured learning:创造一个有结构的东西(eg.绘画、写文章)

过程: 1.写出一个带有未知参数的函数

2.定义loss function

3.最优化:寻找最好的参数

1.1.Function with Unknown Parameters

Model:带有未知参数的function——

w:weight,权重

b:bias,偏差

x:特征

1.2. Define Loss from Training Data

Loss:关于未知参数的函数,输出值代表model的好坏——

代入训练资料,对比输出结果和真实值(label)的差距,每一份训练资料都可以得到一个error,从而计算得到总的Loss。不同参数值可以得到不同的loss,可以画出等高线图,叫做Error Surface。

(红色代表L值更大,即这一组w和b效果差)

1.3. Optimization

找一个w跟b,找到一个未知参数的值,可以让Loss的值最小,就是最优的参数。

最优化的方法:gradient descent

1°随机初始参数

2°计算斜率

3°更新参数,更新取决于斜率和步长(learning rate)。

4°重复以上步骤。停止情况:①设定训练次数上限;②微分值为0时。

*学习速率由自己设定,这种自己设定的参数称为hyperparameters。

假定的这个模型叫做线性模型(linear model),这种模型过于简单,难以符合现实。这种来自model的限制叫做model的bias,指的是模型没有办法模拟真实的情况。

将数个线性模型集合在一起,可以克服这种局限性,叫做Piecewise Linear 的 Curves,理论上可以用这种curves去逼近任何连续的曲线。

用一个sigmoid function来逼近这个linear model——

2.1

更复杂的模型——

更多的特征——

在考虑3个feature,即j=3的情况下:

①考虑括号内,即i=1时第一个sigmoid的情况

②一共有3个sigmoid,为了简化,使

可以通过向量表示为

③括号内得到的r通过sigmoid,实际上

可以表示为

④然后sigmoid的输出分别乘以ci再相加,结果加上b得到y

⑤用线性代数的方法表示model即

(其中y和b【灰色】都是数值,c、b、x为1*3的向量,W为3*3的矩阵)

其中x是feature,W、b、c都是未知参数,把它们拉成一个很长的向量,统称为未知参数

2.2

现在的loss就变成

2.3

在做gradient的时候,实际上会把n笔资料分成很多batch。每次我们会先选一个 Batch,用这个 Batch 来算 L,根据这个 L1 来算 Gradient,用这个 Gradient 来更新参数,接下来再选下一个 Batch 算出 L2,根据 L2 算出 Gradient,然后再更新参数,再取下一个 Batch 算出 L3,根据 L3 算出Gradient,再用 L3 算出来的 Gradient 来更新参数。把所有batch遍历一次叫做一个epoch,每更新一次参数叫做一次update。

3.Rectified Linear Unit

hard的sigmoid可以看作两个ReLU的加总

可以用两个ReLU函数替换一个sigmoid函数,在机器学习中这是可以选择的,这类函数我们叫做activation function(激活函数)。

这些节点叫做neuron,很多的neuron连接起来就叫做neuron network。每一排neuron叫做一个layer(hidden layer),很多的隐藏层的网络就叫做deep learning。

拓展:关于激活函数

深度学习笔记:如何理解激活函数?(附常用激活函数) - 知乎 (zhihu.com)

激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。在神经元中,输入的input经过一系列加权求和后作用于另一个函数,这个函数就是这里的激活函数。因为神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,所以如果没有激活函数,那么无论你构造的神经网络多么复杂,有多少层,最后的输出都是输入的线性组合,纯粹的线性组合并不能够解决更为复杂的问题。而引入激活函数之后,我们会发现常见的激活函数都是非线性的,因此也会给神经元引入非线性元素,使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。

激活函数可以分为线性激活函数(线性方程控制输入到输出的映射,如f(x)=x等)以及非线性激活函数(非线性方程控制输入到输出的映射,比如Sigmoid、Tanh、ReLU、LReLU、PReLU、Swish 等)

1.sigmoid函数

Sigmoid函数也叫Logistic函数,用于隐层神经元输出,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。在特征相差比较复杂或是相差不是特别大时效果比较好。

2.Tanh/双曲正切激活函数

Tanh 激活函数又叫作双曲正切激活函数(hyperbolic tangent activation function)。与 Sigmoid 函数类似,Tanh 函数也使用真值,但 Tanh 函数将其压缩至-1 到 1 的区间内。与 Sigmoid 不同,Tanh 函数的输出以零为中心,因为区间在-1 到 1 之间。

3.ReLU函数

ReLU函数又称为修正线性单元(Rectified Linear Unit),是一种分段线性函数,其弥补了sigmoid函数以及tanh函数的梯度消失问题,在目前的深度神经网络中被广泛使用。

4.Leaky ReLU

为了解决 ReLU 激活函数中的梯度消失问题,当 x < 0 时,我们使用 Leaky ReLU——该函数试图修复 dead ReLU 问题。其中是一个很小的数。

5.softmax

Softmax 是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为 K 的任意实向量,Softmax 可以将其压缩为长度为 K,值在(0,1)范围内,并且向量中元素的总和为 1 的实向量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值