初识神经网络之我的理解
- 个人理解
- 分析一个神经网络
- 相关python代码
- 参考文档
个人理解
个人认为神经网络是一个分类问题,即通过多维的参数通过合适的计算来得到一个确定的输出。
在数学层面看来是从高维度的参数降维为低维度的分类的过程。至于输出的结果如何达成我们想要的或者实际情况,则是调参的过程。
分析一个神经网络
- 假设输入有 1000 个参数,即每次采样采样1000个参数,一共采样64次。这就构成了一个64 * 1000 的输入矩阵。
- 最终的识别结果是 10 个物品,例如:苹果、香蕉、橙子、葡萄、草莓、桃子、西瓜、菠萝、梨、蓝莓;一次采样输出一个结果(包含 10 个物品各自的可能性),所以最终输出了一个 64 * 10 的输出矩阵。
- 中间的计算过程纯粹是数学问题:
- 那么从输入的 64* 1000 的矩阵转变为 64 * 10 的矩阵,中间需要做矩阵转换;64 * 1000 的矩阵 X 1000 * 10 的矩阵就可以得到 64 * 10 的矩阵。
- 这个1000 * 10 的中间矩阵就是隐藏层;
- 隐藏层负责进行维度转换,同时矩阵的参数也成为权重,负责识别的准确度;
- 这里我们隐藏层采用两层:
- 第一层为 1000 * 100 的矩阵
- 第二层为 100 * 10 的矩阵
- 这里我们隐藏层采用两层:
- 在两个隐藏层之间做了一个简单的处理,使用 ReLu 函数滤除掉负值的中间过程;
- 这里的 ReLu 为激活函数:
- 激活函数是神经网络中的一种非线性函数,它被应用于神经元的输出,以引入非线性性质和非线性变换能力。
- 在神经网络中,激活函数的作用是对输入信号进行处理,并产生一个输出信号。这个输出信号可以作为下一层神经元的输入,从而构建复杂的网络结构。
- 参数调整的过程:
- 通过上述计算可以得出一个预测的输出结果,那么这个结果跟实际的情况的符合度就成了参数调整的依据;
- 这里通过平方误差的总和计算出预测与实际之间的偏差大小;
- 然后通过梯度修改参数,并使用新的参数重复以上两步,直到误差收敛到可接受的范围内。
相关python代码
import numpy