最近在捣鼓深度学习,今日忽然开窍,对于大模型上千亿参数的了解顿悟了,所以才有了这篇文章。

一个浅显易懂的模型举例

先用一个最简略的比如来阐明,例如身高和体重之间是有必定对应的联系的。

假如咱们有了十分多身高与体重对应联系的数据,咱们就可以运用这些数据得到二元一次方程函数:

y=ax+by = ax + b

这儿 aabb 是常数, 经过对方程求解,咱们是可以得出 aabb 的详细数值。

之后只需输入一个代表 xx 的身高,就可以得出一个代表体重的 yy 值,当然这个 yy 值不是准确的,是一个猜测值。

以上便是一个最简略的机器学习模型,即线性回归,这儿的 aabb 便是模型的参数,可是它太简略,一共就2个参数,所以其才能也必然十分有限。

从编程的视点了解怎样运转模型

每一个模型都是在处理某一方面的问题,上边的比如中咱们可以看出,这是一个猜测体重的数据模型,要处理的问题是,我输入一个身高,会给我一个猜测的体重。

咱们要运转运用这个模型,从编程的视点大致可以了解:

  1. 加载模型文件:其实模型文件里边记载的便是 aabb 的值,所以有些模型文件是json格局,加载模型的伪代码如下:

    function loadModule(moduleFile){
        let str = fs.readFile(moduleFile)
        let obj = JSON.parse(str)
        // 本质上咱们便是为了拿到a、b
        let a = obj.a; 
        let b = obj.b;
    }
    
  2. 运转模型的神经网络架构,模型的参数 aabb 是运转在这个神经网络里边的,其实也便是把这个公式:

    y=ax+by = ax + b

    用代码实现出来:

    function  net(x){
        // 这儿的a、b来自第一步
        let a = 1; 
        let b = 2;
        return a * x + b;
    }
    

    这样经过net函数的核算,就得到了一个猜测的成果,从运用者视点来说,咱们现已拿到了想要的成果。

模型参数 aabb 怎样来的

你或许还有一个疑问,模型文件里边记载的是参数 aabb , 那它们怎样来的?

答案是他们是经过练习得到的,什么意思呢?

举个比如,咱们现已知道模型的函数如下,这个函数其实是解说了xxyy之间的联系:

y=ax+by = ax + b

最开端咱们必定不知道 aabb 的详细值,所以咱们才需求经过练习找到 aabb 的值。

练习的进程如下:

  1. 将第一组采样数据传递给这个函数,比如身高170,体重60,很明显,一组采样数据得不到 aabb 成果,由于 aabb 有很多个可以使这个函数建立,可是这一步咱们还是需求确定来一个满意采样数据的 aabb 解,即便 aabb 的解存在十分多个。

  2. 将第二组采样数据传递给这个函数,比如身高160,体重50,很明显,两组数据就能求解 aabb ,由于一组二元一次方程就能求解方程中的2个未知数,这就不需求再解说为什么吧,小学的数学常识。

至此,咱们现已求解出 aabb,咱们将aabb的值以某种格局保存起来,然后别人运用这个模型的时分,加载这个文件即可,和上一步的流程形成了闭环。

为什么叫做深度学习

假如咱们持续将第三组采样数据传递给这个函数,就会发生问题,由于上边的方程是一个线性方程,假如练习的第三组数据不满意线性,那么咱们就无法求解aabb,由于二元一次方程无法一起满意3组非线性采样数据。

假如呈现这种状况,有很多种处理办法:

  1. 修改模型函数,添加方程的未知数,很显然这种办法不具有通用性,由于咱们的采样数据数量是不确定的。
  2. 添加模型函数的深度,即添加调用层数,用代码说或许比较直观
    let deep = 10;
    let result = x;
    for(int i = 0; i < deep; i++){
        result = net(result) // 还记得之前的net函数的实现么?
    }
    

    将上一层的核算成果作为当前的参数进行核算,重复这个进程,直到终究一层,这个进程就像剥洋葱相同,我想这也是为啥叫做深度学习的原因吧

到这儿,咱们也能了解为啥会发生多层神经网络了。

对智能出现的思考

模型的猜测成果什么样子,彻底取决于练习的数据。

实际生活中,咱们的采样数据一般都不是线性的,经过咱们的练习,练习数据的输入和输出终究都会落在咱们规划的神经网络,当咱们传递一个新的数据时,当然成果也是落在那条拟合曲线里边。

这儿就又牵扯智能出现,大约便是说当神经网络满足杂乱(意思便是参数满足多),成果有时分不会落在这个拟合曲线里边,这儿就不展开了,由于我也是外行人。

神经元为什么是y=ax+b

深度学习就像洋葱相同,一层又一层,每一层咱们都可以看做一个单元,有点神经元的感觉,咱们再仔细观察下这个方程:

y=ax+by = ax + b

这儿的 aa 十分像权重(浅显点说便是占比),bb 十分像偏置(浅显点说便是偏移),作为一个根底单元,它满足简略却又不失灵敏。

就像乐高积木相同,每一块的规划都是十分类似,并且结构简略,可是却能彼此连接成网,堆叠成层,组合出十分神奇的著作。

尽管神经元y=ax+b十分简略,这一层尽管只有2个参数,当咱们层数十分多的时分,参数都是翻倍增加。

可以大约的说,参数越多,模型的表征才能就越强,包含的常识就越多。

不过你或许发现了输出的成果是一个数值,而咱们运用chat-gpt的时分,反应的成果是自然语言,这儿边就牵扯到了自然语言模型,对自然语言的转换,其背后原理是transformer,也是深度学习的成果,不太懂,这儿就不再细聊了。

模型里边都存储了什么,才能越强为啥模型文件越大

看到这儿,相信你也就知道这个问题的答案了

由于模型里边存储的是参数,模型越强悍,模型的参数越多,保存这些参数的文件就越大,模型也就越大。

依照我的了解,参数越多,模型的网络层级就越杂乱,消耗的核算资源就越多。

像咱们最开端举例的模型,模型文件就2个参数,模型文件估量也就1k,当然精干的事情也十分少!

希望这篇文章可以让你对深度学习有所了解,以上是我个人了解,必定有错误的了解,欢迎指正,彼此交流。