c语言神经网络实验报告,用 C 语言实现神经网络需要几步?

一、写在前面的话

本章主要讲讲神经网络的数学基础,并将神经网络中浮夸的概念用合理的顺序整理一下。应该具备的数学基础说多不多:基本上熟悉导数、线代、概率,那么大部分内容就可以看懂了,然而再进行深入学习的话又需要了解一些微分流形的东西,这个东西也是函数导数所衍生的概念,想想也不是很复杂。但好事者给起了很多复杂的名字,比如PCA比如Adam,这无形中也增加了学习成本。以至于很多人学习过程的最大感受就是:我终其一生似乎都在名词的海洋上漂泊。很多年前在学习数据挖掘算法的时候老师就说过:这些算法你们要完全学会得需要几年的时间。几年时间大约也是人生中最有学习兴趣的几年。现在各种渠道充斥着《28天学会XXXX》的就显得有些高调的过分了,28天学习大概只够学习一门简单的编程语言比如Python,想学会算法之上的内容除非你数学很好,是极好的那种,这种人应该是极少的。所以学习神经网络也是一个体力活,需要不断的分析实践。

二、从几何开始

从几何开始大概是学习神经网络最合适的切入点,大部分神经网络的目标就在于构建一个超曲面,而几何中的张量衍生出了矩阵概念,最后作为几何基础的函数和导数是分析神经网络的基础。

首先来看下空间函数:

$$f(x_1,\cdots,x_n)$$

上面这个函数是定义于N维空间中的函数,这个N维空间数学符号为$\mathbb{R}^n$,其中$(x_1,\cdots,x_n)$被称为空间坐标,到这里就是空间几何的入门了,但接下来我们并不能分析神经网络。在分析之前还需要一个概念就是梯度:

$$\nabla{f}(x_1,\cdots,x_n)=

(\frac{\partial{f}}{\partial{x_1}},\cdots

\frac{\partial{f}}{\partial{x_1}})$$

这里的梯度就是对每个坐标分量求偏导数,这是最简单的梯度的形式也是欧式空间中的梯度,在其他坐标空间之下如球坐标、柱坐标等,梯度作为一个向量显然应当保持空间不变性,这种空间不变性指的是不管在何种坐标系之下梯度方向和大小都不会发生变化。为保持这种不变性梯度分量的数值上就会改变。这种数值上的变化可以用链式求导法则求得:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值