小菜菜程序媛

A blog-orientation theme for Frieda

Love coding, coding love me!.


github address

关于矩阵乘法的那点事

不知道你们在用numpy或者tensorflow的时候有没有总是一种苦恼,就是分不清楚点乘,乘法以及内积外积。发现之前都是瞎搞,所以现在闲下来想要彻底搞清楚下。

内容List:

  • 内积与外积
  • 点乘和矩阵乘法
  • numpy和tensorflow中的使用

内积与外积

内积:一个行向量乘以一个列向量称作向量的内积,又叫做点积,结果是一个数。

外积:一个列向量乘以一个行向量称作向量的外积,一种特殊的克罗内克积,结果是一个矩阵。

向量的点乘也叫向量的内积,是对两个向量执行点乘运算,就是对两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量。它的几何意义是可以用来表征或计算两个向量之间的夹角,以及在向量上的投影。
向量的外积是一个向量,并且两个向量的外积与这两个向量组成的坐标平面垂直。它的物理意义是,在二维集合中,向量a和b的结果是向量a和b构成的平行四边形的面积。三维几何中,向量a和向量b的叉乘结果是一个向量,该向量垂直于a和b向量构成的平面,即法向量。

矩阵乘法

内积和外积一般是针对向量来讨论的。从向量的角度来讨论下矩阵乘法: 此时AB为两个新的向量的外积形式,按照外积的定义,这里都是向量,因此就是一个内积,矩阵的乘积是两个向量的外积,并且外积矩阵中每一个元素是一个内积。

Numpy和Tensorflow中的使用

  • np.multiply():对向量或矩阵执行对应位置相乘,输出与相乘向量和矩阵的大小一致
	A = np.asarray([[2, 2], [1, 4]])
	B = np.asarray([[1, 1,], [2, 1]])
	print np.multiply(A, B )

	### out 
	### [[2 2]
	### [2 4]]

  • np.dot:对向量执行内积,对秩不为1的二维数组,执行矩阵乘法运算。
	C = np.asarray([1, 2])
	D = np.asarray([2, 2])
	print C.dot(D)  ## 6

	A = np.asarray([[2, 2], [1, 4]])
	B = np.asarray([[1, 1,], [2, 1]])
	print A.dot(B)   

	## out
	## [[6 4]
	## [9 5]]
  • *乘法,需要特别注意,当AB为array的计算的是数量积,类似于np.multiple(), 当AB为matrix的时候计算的是矢量积,类似于np.dot()
	A = np.asarray([[2, 2], [1, 4]])
	B = np.asarray([[1, 1,], [2, 1]])
	print A * B 

	### out 
	### [[2 2]
	### [2 4]]


	A = np.mat([[2, 2], [1, 4]])
	B = np.mat([[1, 1,], [2, 1]])

	print A * B

	## out
	## [[6 4]
	## [9 5]]
  • np.tensordot() 我的理解是该方法适用于我们在计算神经网络的时候,一般输入是batch输入的x, weight矩阵是同一个,因此一个B * M* k 和 kh的指定axes=1,结果为B * M h。
      import numpy as np
      a = np.array([[[3, 4], [1, 2]], [[1, 3], [1, 1]],])   ## 2* 2 *2
      b = np.array([[2],[1]])
      print a.shape  ## (2, 2, 2)
      print b.shape ## (2, 1)
    
      ## out [[[10][ 4]][[ 5][ 3]]]
    
      print np.tensordot(a, b, axes=1)  ##batch tensordot
    
  • tf.multiple() 对应np.multiple()
  • tf.matmul(A, B) 对应np.dot() 如果出现三维张量的情况,选择A最外围的两维度和B最内的两个维度,其他维必须是相同的,可以实现batch的乘法操作。

	import tensorflow as tf

	a = tf.constant([[[1, 2], [2,3]], [[1,1], [1,2]]])
	b =  tf.constant(([[[1, 2], [2,3]]]))
	sess = tf.Session()
	with sess.as_default():
		print(sess.run(tf.matmul(a, a)))  
		# out
		## [[[ 5  8]
		 ##  [ 8 13]]
		 ##[[ 2  3]
		 ##[ 3  5]]]

    
  • tf.tensordot() 对应np.tensordot()
最近的文章

信息流产品与内容推荐

这篇文章写于听了吴锴的了解信息流产品和内容推荐算法写的摘要笔记。 信息流产品的价值,用户粘合性方面?商业营收?行业内的数据 信息流产品如何做推荐 一般使用的指标 决定信息流整体推荐信息因素 信息流用户画像的建立信息流产品的特点1> 在合适的场景为用户提供合适的内容2> 适合手机屏幕,手指上下流动3> 数据量做够大,能够不断刷新内容信息流产品的价值商业上的价值:信息流产品已经成为用户接受的高效变现模式用户的价值: 是一个拥有海量信息,及时新鲜的内容可以给用户带来便...…

recommendation继续阅读
更早的文章

ctr预估model总结

所谓CTR预估,就是点击率转换的预估,即click through rate, 一般用在推荐广告系统中。简单来说,就是当用户预览网页或者在使用APP的时候,在用户浏览的页面中插入一些广告,如果用户在浏览的过程中点击了这些广告,就算做是一次成功的转化。因为考虑到了用户的因素,因此针对不同的人不同的爱好,系统会推荐不同的广告。如果是离线系统,一般采用AUC进行系统性能的评估,如果是在线系统,一般采用A&B Test的方式进行系统评估。在推荐系统中,输入样本的特征包括了数值特征和类比特征...…

deep learning, ctr, recommendation继续阅读