《深度学习的数学——使用Python语言》线性代数
<div class='showpostmsg'><p>线性代数关注的是线性方程组的问题。在线性方程组中,各变量的最高次幂为1 。然而,就我们的学习目的而言,我们关注的线性代数是多维数学对象(如向量和矩阵)的计算问题。这是线性代数在深度学习中的典型用途,也是在深度学习的算法实现中对数据进行运算的核心。由于关注点不同作者会抛开大量酷炫的数学内容。</p><p>在这章中作者介绍深度学习中不同类型的对,具体包括标量,向量,矩阵和张量。这些对象其实都是不同阶数的张量。本章将从数学和符号的角度讨论张量,然后使用NumPy对它们进行实验。NumPy明显是为了给Python添加多维数组而设计的。NumPy虽然不完美,但它可以很好的模拟本章需要使用的数学对象。</p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>标量:</p>
<p>这个名词理解,标量就是一个数字,比如7、42或PI。在表达式中,x表示标量,也就是不带任何样式的变量记号。对于计算机来说,标量就是一个简单的数值变量:</p>
<pre>
<code>>>> s = 66
>>> s
66
>>> </code></pre>
<p> </p>
<p>向量:</p>
<p>向量是由数字构的一维数组。在数学上,向量有水平和垂直两种列式方法。如果是水列式,那么就一个行向量。</p>
<p>x=</p>
<p>其中x是由3个元素构成的行向量。</p>
<p>在数学上,我们通常将向量表示为列向量y=<img alt="\binom{y0}{y1}" src="https://bbs.eeworld.com.cn/gif.latex?%5Cbinom%7By0%7D%7By1%7D" /></p>
<p> </p>
<p>y,为二维向量。</p>
<p>在代码中,我们通常使用一维数组来表示向量</p>
<pre>
<code>>>> import numpy as np
>>> x = np.array()
>>> print(x)
>>> print(x.reshape((3,1)))
[
]
>>>
</code></pre>
<p>上述代码中通过调用reshape函数,将一个三元行向量转换成了列向量。</p>
<p>向量中的成员通常表示向量在一组坐标系中沿各个坐标轴的长度。例如,一个三元向量可以表示三维空间中的一个点。在这个三元向量中,x是沿X轴的长度,y是沿y轴的长度,z是沿z轴的长度,这就是笛卡儿坐标系用于唯一地表示整个三维空间中所有的点,比如:</p>
<p>x=(x,y,z)</p>
<p>然后,在深度学习和机器学习领域,向量的各个成同之间通常没有严格的几何位置关系。它们用来表示特征,也就是描述样本特性的某些量。模型需要通过这些量来得到有用的输出,如分类标签或回归值。尽管如此,用来表特征向量(特征的集合)的特征有时也是有几何含义的。例如,一些机器学习算法(如k近邻算法)会把特征解读为几何空间中的坐标。</p>
<p>在深度学习中,问题的特征空间是指由所有可能的输入构成的集合。提供给模型的训练样本需要能够有效地表示模型在使用阶段的特征空间。从这个角度讲,特征向量就是n维空间的一个点,n等于特征向量中特征的数量。</p>
<p>矩阵:</p>
<p>矩阵是由数字构成的二维数组。</p>
<p>A=<img alt="\begin{bmatrix} a00 & a01 &a02 \\ a10& a11 & a12 \end{bmatrix}" src="https://bbs.eeworld.com.cn/gif.latex?%5Cbegin%7Bbmatrix%7D%20a00%20%26%20a01%20%26a02%20%5C%5C%20a10%26%20a11%20%26%20a12%20%5Cend%7Bbmatrix%7D" /></p>
<p>在矩阵A中,各元素所处的行数和列数为下标。矩阵A包含2行3列,因而它被称为2*3的矩阵。其中,2*3就是矩阵A的阶数。注意,数组的下标是从0开始的。矩阵在代码中是二维数组表示的:</p>
<pre>
<code>>>> a = np.array([,])
>>> print(a)
[
]
>>> </code></pre>
<p> </p>
<p>numpy就一个数据结构:ndarray ,但变化多端。。。<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/loveliness.gif" width="48" /></p>
hellokitty_bean 发表于 2025-1-20 12:00
numpy就一个数据结构:ndarray ,但变化多端。。。
<p>根本学不完呀,学不完!以前做报表时用过,还没有想到可以做向量、张量。</p>
<p>张量:</p>
<p>标量是零给的,向量是一维的,矩阵是二维的。高于二维的对象称为张量。</p>
<p>张量的维数又称为阶数,注意不要与矩阵的阶数弄混淆。三维张量的阶数为3.矩阵是二阶张量(阶数为2),向量是一阶张量(阶数为1),标量是零阶张量(阶数为0)。在以后学习神经网络中的数据流时,会看很多组件使用了四阶张量(甚至更高阶的张量)</p>
<p>【小结】张量可以用阶数来统一标量、矩阵、向量等等。</p>
<p>在Python中,可以使用三维或者更高维的NumPy数组来实现张量。</p>
<p>如下为一个三维张量:</p>
<pre>
<code>>>> t = np.arange(36).reshape((3,3,4))
>>> print(t)
[[[ 0123]
[ 4567]
[ 89 10 11]]
[
]
[
]]</code></pre>
<p>这段代码中首先用np.arange定义了一个由数字0-35组成的向量,其中包含36个元素。接下来通过调用reshape函数,将这个数组转换成3*3*4的张量。理解这个3*3*4的张量的一种方式,就是将其想象一个由3张3*4的矩阵图片叠在一起的阵列。</p>
<pre>
<code>>>> print(t)
[[ 0123]
[ 4567]
[ 89 10 11]]
>>> print(t)
>>> print(t)
6
>>> </code></pre>
<p>书中使用以上代码对张量中的元素进行了访问。</p>
<p>下面这个表让我明白了张量与上面说的标量、向量、矩阵、张量等关系</p>
<p> </p>
<p>一开始不理解AI,以为AI是电子,实际AI是数学。真的是学好数理化,走遍天下都不怕</p>
qzgiky 发表于 2025-1-21 11:40
一开始不理解AI,以为AI是电子,实际AI是数学。真的是学好数理化,走遍天下都不怕
<p>对的,数学是基础东西,没有数学,行不通呀。</p>
<p>确实如此。。。。。。。机器学习就是数学。。。。。。。。。<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/smile.gif" width="48" /></p>
qzgiky 发表于 2025-1-21 11:40
一开始不理解AI,以为AI是电子,实际AI是数学。真的是学好数理化,走遍天下都不怕
<p>化现在不太行了,数理还是可以。现在据说很多大学都在关停化相关专业。</p>
freebsder 发表于 2025-1-21 18:48
化现在不太行了,数理还是可以。现在据说很多大学都在关停化相关专业。
<p>基础的东西还需要有人来做的,人类的进步,都是无数科学家的付出。</p>
<p>单位向量</p>
<p>在学会计算向量的模长之后,下面介绍向量的一种很有用的表示形式,名为单位向量。如果将向量中的各个元素除以向量的模长,就可以得到一个方向不变且大小为1的向量,这就是单位向量。</p>
<p>使用NumPy的计算单位向量(2,-4,3)的代码如下:</p>
<pre>
<code>>>> v = np.array((2,-4,3))
>>> u = v/np.sqrt((v*v).sum())
>>> print(u)
[ 0.37139068 -0.742781350.55708601]</code></pre>
<p>上述代码利用了向量的按元素相乘的特性,让向量v乘以自身,便可得到其中每个元素的平方项。然后调用sum函数,得到所有元素的平方和,从而计算出向理的模长。</p>
页:
[1]