前言
完成coursera
上吴恩达老师的深度学习专项课程第一课神经网络与深度学习已经有一段时间了。由于笔记中的各类公式就没有开始动笔总结并发布。
好在最近也在很痛苦地学习LaTex,就企图与LaTex一起更新算了。假期快结束,后面时间其实也是很紧张的。==不该浪的,不该浪的
值得一提的是,我非常不建议在非coursera
平台学习吴恩达老师的课程。coursera
的课程大多数都可以申请奖学金资助,只要你是学生基本都会通过审批。至于coursera
的视频播放问题,在大多数情况下改电脑的host
都可以解决,再加上腾讯布局的长鹅教育加速器在后期也会逐渐发力。实在没有理由再去b站那些平台听课。但,最重要的一点是,学习实际上是一个反馈的过程,这个反馈最好的方式就是费曼学习法。
coursera
的平台作业能够实时反馈你的学习情况,遇到不会的可以回去重新听一遍。然而b站实际上没有这种功能,尽管大多数up主会在他们的评论区贴出作业,但是没有coursera
的实时反馈,那些作业实际上给自己的帮助也不是太高,更不提在coursera
上类似jupyter notebook的线上系统做作业,进而不用在自己电脑上安装相关环境的优势。
另外就是,不要高估自己自主学习的能力,那些b站的作业链接大多人也不会点开,点开了也不一定做,做了也不一定会认真写,看几下就去面向百度做作业比比皆是。对于编程类的实践作业课程,b站真的不是最适合的。
结构化数据与非结构化数据的区别
结构化数据
结构化数据,如果你觉得不好记住,不妨就这样记着,能够用传统的数据库行列存储的数据都是结构化数据
非结构化数据
非结构化数据,包括文档、文本、图片、XML、HTML、报表、图像和音视频这些,是传统的数据库行列不能存储的数据
在第一周的测验中有着相关的题目
神经网络与深度学习第一周测验 Introduction to Deep Learning
题目大概意思是:
猫的识别图像是"结构化"数据的示例,是因为它在计算机中表示为结构化数组。真/假?
这当然是错的,猫的图像是个图片,不是结构化数据
图片的矩阵表示
借着上面的猫的图像,我们来看看在计算机中,图片的二进制表示(本文大多数公式是使用LaTex敲的,感兴趣可以学习LaTex)
一张图片中有红绿蓝三个矩阵,来完整描述一个图片的像素值。如果这张图片是64×64的,那么它的像素值就是64×64×3。在x中我们可以表示成下面的样子用于图像数据的输入,x在这种情况下就是64×64×3维的。记得这是小x,与后面的大X要区分开。
x
=
[
255
⋮
233
⋮
⋮
]
\mathbf{x}=\begin{bmatrix} 255\\ \vdots\\ 233\\ \vdots\\ \vdots\\ \end{bmatrix}
x=⎣⎢⎢⎢⎢⎢⎢⎢⎡255⋮233⋮⋮⎦⎥⎥⎥⎥⎥⎥⎥⎤
输入输出格式
于是对于输入x,输出y,我们有:
(
x
,
y
)
x
∈
R
n
x
,
x
是
n
(
x
)
维
向
量
,
y
∈
{
0
,
1
}
(x,y)\qquad x\in R^{n_x},\quad x是n(x)维向量,\quad y\in\{0,1\}
(x,y)x∈Rnx,x是n(x)维向量,y∈{0,1}
对于m个训练样本
{
(
x
(
1
)
,
y
(
1
)
)
,
(
x
(
2
)
,
y
(
2
)
)
,
⋯
(
x
(
m
)
,
y
(
m
)
)
}
\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),\cdots (x^{(m)},y^{(m)}) \}
{(x(1),y(1)),(x(2),y(2)),⋯(x(m),y(m))}
有
X
=
[
⋮
⋮
⋮
⋮
⋮
⋮
⋮
⋮
x
(
1
)
x
(
2
)
x
(
3
)
⋯
x
(
m
)
⋮
⋮
⋮
⋮
⋮
⋮
⋮
⋮
]
⏟
n
(
x
)
×
m
维
矩
阵
}
n
x
\mathbf{X}= \left. \underbrace{\begin{bmatrix} \vdots & \vdots & \vdots &\quad & \vdots \\ \vdots & \vdots & \vdots &\quad & \vdots \\ x^{(1)} & x^{(2)} & x^{(3)} & \cdots & x^{(m)} \\ \vdots & \vdots & \vdots &\quad & \vdots \\ \vdots & \vdots & \vdots &\quad & \vdots \\ \end{bmatrix}}_{n(x)\times m维矩阵 }\right\}_{n_x}
X=n(x)×m维矩阵
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡⋮⋮x(1)⋮⋮⋮⋮x(2)⋮⋮⋮⋮x(3)⋮⋮⋯⋮⋮x(m)⋮⋮⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤⎭⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎫nx
这样对x的输入进行表示较为简单
与此对应的y的输出应该为
Y
=
[
y
(
1
)
y
(
2
)
y
(
3
)
⋯
y
(
m
)
]
⏟
1
×
m
大
小
的
矩
阵
\mathbf{Y}= \underbrace{\begin{bmatrix} y^{(1)} & y^{(2)} & y^{(3)} & \cdots & y^{(m)} \\ \end{bmatrix}}_{1\times m大小的矩阵}
Y=1×m大小的矩阵
[y(1)y(2)y(3)⋯y(m)]
X与Y的形状为
X.shape(nx,m)
Y.shape(1,m)
Logistic Regression逻辑回归
现在我们使用$ \hat{y} $ 表示对真实值
y
y
y 的估计
y
^
=
P
{
y
=
1
∣
x
}
0
≤
y
^
≤
1
\hat{y} = P\{y = 1| x \} \qquad 0\le \hat{y} \le 1
y^=P{y=1∣x}0≤y^≤1
接下来是定义逻辑回归的参数
w
w
w 和
b
b
b
w
∈
R
n
x
,
b
∈
R
,
b
是
一
个
偏
置
量
w\in R^{n_x}, \quad b\in R, \quad b是一个偏置量
w∈Rnx,b∈R,b是一个偏置量
我们定义输出为
y
^
=
σ
(
w
T
x
+
b
)
,
σ
是
s
i
g
m
o
i
d
函
数
\hat{y} = \sigma(w^Tx+b),\quad \sigma是sigmoid函数
y^=σ(wTx+b),σ是sigmoid函数
s
i
g
m
o
i
d
sigmoid
sigmoid 函数如下图所示
为什么要使用 s i g m o i d sigmoid sigmoid 函数?
这是因为从上文的 y y y 输出我们可以知道, y ^ \hat y y^ 要在 ( 0 , 1 ) (0,1) (0,1) 的区间范围内
而 s i g m o i d sigmoid sigmoid函数作为激活函数可以满足这个要求
s
i
g
m
o
i
d
sigmoid
sigmoid函数的函数公式如下
σ
(
z
)
=
1
1
+
e
−
z
\sigma(z)=\frac{1}{1+e^{-z}}
σ(z)=1+e−z1
学过导数极限我们可以知道
当 z → + ∞ z\to +\infty z→+∞时, z → 1 z\to 1 z→1
当 z → − ∞ z\to -\infty z→−∞时, z → 0 z\to 0 z→0
接下来我们要设计loss函数和cost函数,首先我们要明确loss函数和cost函数的区别
loss函数是单一值训练的偏差情况
l
o
s
s
f
u
n
c
t
i
o
n
:
ℓ
(
y
^
,
y
)
=
1
2
(
y
^
−
y
)
2
loss \quad function:\quad \ell(\hat y,y) = \frac{1}{2}(\hat y - y)^2
lossfunction:ℓ(y^,y)=21(y^−y)2
cost函数是所有的训练值偏差情况和的均值
ȷ
(
w
,
b
)
=
−
1
m
∑
1
m
[
y
(
i
)
l
o
g
y
^
(
i
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
y
^
(
i
)
)
]
\jmath(w,b) = - \frac{1}{m}\sum_{1}^m \left[ y^{(i)}log \hat y^{(i)}+(1-y^{(i)})log(1-\hat y^{(i)})\right]
ȷ(w,b)=−m11∑m[y(i)logy^(i)+(1−y(i))log(1−y^(i))]
cost函数能够很好反映参数成本,进而找到更好的
w
w
w 与
b
b
b
Gradient Descent梯度下降
w = w − α d ȷ ( w , b ) d w b = b − α d ȷ ( w , b ) d b w = w - \alpha \frac{d\jmath (w,b) }{dw}\\ b = b - \alpha \frac{d\jmath (w,b) }{db} w=w−αdwdȷ(w,b)b=b−αdbdȷ(w,b)
我们使用梯度下降来对 w w w 与 b b b 进行更新
找到使得 ȷ ( w , b ) \jmath (w,b) ȷ(w,b)取得最小的 w w w与 b b b
在逻辑回归中,我们一定能够找到这样的一组符合条件的 w w w 与 b b b 使得 ȷ ( w , b ) \jmath(w,b) ȷ(w,b) 取得最小值
后记
本篇主要是逻辑回归与梯度下降的笔记,主要介绍输入输出的格式,逻辑回归与梯度下降的做法等。
如果有更好的想法,欢迎在评论区留言!欢迎一键三连!