「机器学习」神经网络

一、神经元和大脑

1. 概述

  • 起源:

    研究可以模拟大脑的算法。

  • 应用:

    语音、视觉、文本 (自然语言) ......

(1) 大脑神经元与算法

:当下重点已不在生物层面,而是在利用工程原理构建更有效的算法。

(2) 深度学习的起飞

2. 需求预测

(1) 神经网络的符号与描述

(2) 不需要自己手动自己设计特征

神经网络将自己决定它将在隐藏层使用哪些数据

3. 例子:图像识别

随着层数增加,窗口大小在增大。

二、工作原理

1. 神经网络的层

【注】上标表示所在层数

  • 第一层​​​​​​​

  • 第二层「机器学习」神经网络_第1张图片

  • 预测结果 (可省略)​​​​​​​「机器学习」神经网络_第2张图片

  • 每一层输入一组数字向量,并对应一组逻辑回归单元, 计算出另一组数字向量并传到另一层。直到得到最终的输出。

2. 计算激活

第 l 层激活的一般形式:「机器学习」神经网络_第3张图片

( g 也称为激活函数 —— 输出激活值的函数)

三、神经网络代码的实现

1. 前向传播算法算法推导

以区分手写数字 0 和 1 为例

  • 前向传播:从左向右传播神经元的激活
    1. 计算第一层激活「机器学习」神经网络_第4张图片

    2. 计算第二层激活「机器学习」神经网络_第5张图片

    3. 计算最后一层激活 (输出)「机器学习」神经网络_第6张图片

    4. (可选)​​​​​​​「机器学习」神经网络_第7张图片

    隐藏层的单元数量随着越来越接近输出层而在减少

2. 使用 TensorFlow 实现

1. 从前往后构建层

(1) 以烤咖啡豆为例 (输入为温度、时间长度):

「机器学习」神经网络_第8张图片

(2) 以识别手写数字为例:​​​​​​​

2. 数据表示

由于历史原因,tensorflow 和 numpy 的数据表示方式冲突 —— t 为矩阵,n 为一维数组。

(1) 在 numpy 中的数据表示:

「机器学习」神经网络_第9张图片

线性回归和逻辑回归通常用一维向量来表示数据,TensorFlow通常使用矩阵来表示。

(2) 在 tensor 中的数据表示:
  1. 「机器学习」神经网络_第10张图片
  2. 「机器学习」神经网络_第11张图片

tf.Tensor() 是由 TensorFlow 团队创建的数据类型,用于存储和执行矩阵上的运算 —— 即矩阵的一种表示方式

a1.numpy() 可将 tensor 转为 numpy 数组

3. 构建一个深度神经网络

Sequential() 函数可将不同层连接起来

model.fit(x,y) 表示在数据 x 和 y 上训练模型

model.predict(x_new) 表示在新数据上,用该神经网络模型进行推理

代码的实现细节请见 下一篇博客

3. 使用 python 和 numpy 实现

1. 硬实现

以前面提到的 烘焙咖啡 为例:

​​​​​​​「机器学习」神经网络_第12张图片

  1. 计算 a1 :

  2. 「机器学习」神经网络_第13张图片

  3. 计算 a2 :

  4. 「机器学习」神经网络_第14张图片

2. 一般实现 (简化版)

(该部分理解即可 —— 用于调试模型代码)

        条件:​​​​​​​「机器学习」神经网络_第15张图片

  • dense() 实现神经网络的单层:

    输入:上一层的激活、神经元参数 w 和 b

  • 输出:当前层的激活

  • def dense(a_in, W, b, g) :
      units = W.shape[1]        #3
      a_out = np.zeros (units)
      for j in range(units):    #0,1,2
        W= W[:,j]
        z = np.dot(w,a_in) + b[j] 
        a_out [j] = g(z)
      return a_out
  • sequential() 将各层串联起来:

    def sequential(x):
      a1 = dense(x, W1, b1)
      a2 = dense(a1, W2, b2)
      a3 = dense(a2, W3, b3)
      a4 = dense(a3, W4, b4)
      f_x = a4
      return f_x

【注】python 中大写字母代表矩阵,小写字母指向量和标量

3. 使用向量化使得算法更高效

X = np.array([[200, 17])
W = np.array([[1, -3, 5],
              [-2, 4, -6]])
B = np.array([[-1, 1, 2]])
​
def dense(A_in, W, B) :
  Z = np.matmul(A_in, W) + B
  A_out = g(z)
return A_out

四、偏差(bias) 和方差(variance)

1. high bias

取决于 Training Data

  • 解决方法:选择一个新的网络
    • 采用更多隐藏层或隐藏单元

    • 训练更长的时间

    • 使用更高级的优化算法

    • 找到更适合当前问题的神经网络结构

2. high variance

是否具有一般化的能力:取决于 Set Data

  • 解决方法
    • 获取更多的数据

    • 采用正则化

    • 找到更适合当前问题的神经网络结构

在早期机器学习时代,通常低偏差和低误差不可兼得。在当下深度学习的时代,可获取更多数据,使两者同时实现。

五、神经网络与通用人工智能 AGI

1. AI 包涵的两个部分

  1. (artificial narrow intelligence) ANI - 狭义人工智能

    E.g.: smart speaker, self-driving car, web search, Al in farming and factories....

  2. (artificial general intelligence) AGI - 广义人工智能

    做任何人类可以做的事情

2. 待解决的问题

  1. 模拟的神经元十分简单,与生物神经元有大的差距

  2. 我们至今仍未知道大脑如何工作

3. 未来的希望

动物实验:仅给定输入,小部分的组织边可学会听、说、写(如感觉细胞可学会看)

也许一种算法给定数据输入,就可以学会处理

你可能感兴趣的:(机器学习,机器学习,笔记,神经网络,人工智能,深度学习,tensorflow)