mirror of
https://github.com/sipeed/sipeed_wiki.git
synced 2026-09-11 00:22:49 -05:00
Merge pull request #926 from Kristinblue/patch-2
Fix typos, grammar, and formatting issues in dnn_basic page
This commit is contained in:
@@ -25,7 +25,7 @@ update_open: false
|
||||

|
||||
|
||||
现在提问,假如数据点规律不变, 输入一个 x 坐标 20, y 的值是多少?
|
||||
按照大家的知识,都知道这是一个一元一次方程(`y = kx + b`能解决的, 带入两个点的值,算出方程为`y = 3x + 10`, 那么当 `x=20`, `y` 的值为`70`, 于是输入是`20`, 输出是`70`。
|
||||
按照大家的知识,都知道这是一个一元一次方程(`y = kx + b`)能解决的, 带入两个点的值,算出方程为`y = 3x + 10`, 那么当 `x=20`, `y` 的值为`70`, 于是输入是`20`, 输出是`70`。
|
||||
|
||||
这里就是 输入(`20`) + 算法(一元一次方程) = 输出(`70`), 这就是我们在解决一个问题时的基本方法, 所以关键就是找到这个符合这条线段上数据点规律的一个算法。
|
||||
|
||||
@@ -44,13 +44,13 @@ update_open: false
|
||||
|
||||
那么,机器学习是不是也可以利用这个步骤来做呢?
|
||||
|
||||
* 我们认为地设计一个算法结构, 加入我们碰巧直接设计成了`y = kx + b`, 我们给具体的直线留下了两个参数,我们暂且称呼这个结构叫 **模型结构**,因为有未知参数,我们称之为未训练的模型结构。其中`x`称为**输入**, `y`称为**输出**
|
||||
* 我们人为地设计一个算法结构, 假如我们碰巧直接设计成了`y = kx + b`, 我们给具体的直线留下了两个参数,我们暂且称呼这个结构叫 **模型结构**,因为有未知参数,我们称之为未训练的模型结构。其中`x`称为**输入**, `y`称为**输出**
|
||||
|
||||
* 现在,我们将我们这条直线的几个点代入到这个方程, 我们称这个过程为 **训练**,得到`y = 3x + 10` 这个算法, 已经没有未知参数了, 我们现在称它为**模型** 或者 训练好的模型,其中`k b`是模型内的参数,`y = kx + b`是这个模型的结构。 而带入训练的数据点,就叫做**训练数据**,它们的统称就叫**训练数据集**
|
||||
|
||||
* 然后,我们使用几个在 训练 过程中没有用到的在线段上的数据点作为输入,代入这个模型进行运算,得到结果,比如 `x = 10`, 得到`y = 40`, 然后对比输出值是否与预期相符,这里我们发现`x = 10, y = 40` 确实是在图中这条直线上的, 并且训练时没有使用这个点,说明我们得到的模型在此次核验中通过,这个过程叫 **验证**, `x = 10, y = 40` 这个数据叫验证数据。 如果我们用多组数据去验证这个模型, 这些数据的统称就叫**验证数据集**
|
||||
|
||||
* 现在, 我们获得了一个**模型**,并且用**验证数据集**对这个模型进行了验证,貌似也是很准确了,那我们就可以假设这个模型基本满足了我们以后有一个`x`, 要求着图中线上任意一点的`y`值,都可以输入`x`给出这条直线上对应点的`y`坐标。 这个过程我们其实是在**使用模型**了,这个过程称之为**推理**
|
||||
* 现在, 我们获得了一个**模型**,并且用**验证数据集**对这个模型进行了验证,貌似也是很准确了,那我们就可以假设这个模型基本满足了我们以后的需求:有一个`x`, 要求图中线上任意一点的`y`值,都可以输入`x`给出这条直线上对应点的`y`坐标。 这个过程我们其实是在**使用模型**了,这个过程称之为**推理**
|
||||
|
||||
其实这就算是机器学习了, 我们人类需要的事就是设计`y = kx + b`这个结构,以及给出**训练数据集**和**验证数据集**,经过**训练**和**验证**得到一个我们认为可用的模型,然后使用`输入 + 模型`就可以得到认为的正确`输出(结果)`了。
|
||||
|
||||
@@ -132,7 +132,7 @@ update_open: false
|
||||
|
||||
**激活函数**:
|
||||
|
||||
上面的模型虽然可以通过输入得到结果,但是会发现,所有层计算都是线性函数,那么不管有多少层,整体其实还是一个线性函数,即`y0 = w1x + b1` + `y = w2y0 + b2` ==> `y = w2(w1x + b1) + b2` ==> `y = w2w1x + w2b1 + b2`, 其实还是一个线性函数,那么多层的意义就没有了,于是我们需要在中间加入非线性函数,让网络内部更加复杂一点, 于是就在每个节点上做手脚, 在每个节点输出数据前,先对其用一个非线性函数运算,比如`sigmod`或者`relu`函数,别听到名字害怕,其实很简单,看下图, 总之就是 x 和 y 不成线性关系:
|
||||
上面的模型虽然可以通过输入得到结果,但是会发现,所有层计算都是线性函数,那么不管有多少层,整体其实还是一个线性函数,即`y0 = w1x + b1` + `y = w2y0 + b2` ==> `y = w2(w1x + b1) + b2` ==> `y = w2w1x + w2b1 + b2`, 其实还是一个线性函数,那么多层的意义就没有了,于是我们需要在中间加入非线性函数,让网络内部更加复杂一点, 于是就在每个节点上做手脚, 在每个节点输出数据前,先对其用一个非线性函数运算,比如`sigmoid`或者`relu`函数,别听到名字害怕,其实很简单,看下图, 总之就是 x 和 y 不成线性关系:
|
||||
 
|
||||
|
||||
即到现在为止, 除了输入层,所有节点输出的值都需要经过`Sigmod(∑(Wn * x + Bn))`, 输出一个浮点数值
|
||||
|
||||
Reference in New Issue
Block a user