DSIN算法介绍

本文深入解析DSIN,一种用于点击率预测的深度学习模型。DSIN通过将用户行为序列划分为多个会话,利用多头自注意力机制和双向LSTM捕捉用户兴趣的演变,最终实现对用户兴趣的有效提取。

参考文献
Deep Session Interest Network for Click-Through Rate Prediction

前情提要
DIN
DIEN

DSIN,全名Deep Session Interest Network,中文名深度会话兴趣网络,跟DIN,DIEN相比,其主要突出了S,Session,这Session具体指的是什么呢,请看下面分解。

却说阿里见众人已双眼迷离,只是无奈地叹了一口气,也不管有没有人继续听,自顾自地开始讲起来。先是照旧扔出一张图
在这里插入图片描述
比起DIEN中对User Behaviors 部分分了三层去处理,在DSIN中有四层!第一层是Session Division Layer,第二层是Session Interest Extractor Layer,第三层是Session Interest Interacting Layer,第四层是Session Interest Activating Layer。先来说Session是什么,我们注意到用户的兴趣很广泛,但在一个较短的时间内还是比较专注的,兴趣会聚焦于一点,我们就把这较短的时间段称为一个Session,比起DIN和DIEN把行为序列全打包到一起,在DSIN中把行为序列划成一个个Session再分别处理会更符合我们的直觉。第一层的Session Division Layer就是把行为序列划成一个个Session,通常把间隔30分钟以上的不同行为item划归成不同的Session,第二层的Session Interest Extractor Layer就是提取出每个Session的兴趣

### FSS算法在DOA估计中的实现与解释 #### 背景介绍 FSS (Fast Subspace) 算法是一种用于高效计算子空间的方法,在信号处理领域广泛应用,特别是在到达方向(DOA)估计方面表现出色。该方法通过减少运算复杂度来提高实时性能。 #### 原理概述 FSS算法的核心在于利用矩阵分解技术快速获取信号子空间和噪声子空间。具体来说,对于接收到的数据阵列 \( \mathbf{X} \),可以表示为: \[ \mathbf{X}(t)=\sum_{i=1}^{d}\alpha_i(t)\mathbf{s}_i+\mathbf{n}(t), t=0,1,\ldots,T-1 \] 其中 \( d \) 是源数,\( T \) 表示采样时间长度,\( \alpha_i(t) \) 和 \( s_i \) 分别代表第 i 个信道的时间序列幅度和平面波矢量[^1]。 为了简化说明,假设已知天线阵列为均匀线性阵列(ULA),则平面波矢量可由下式给出: \[ a(\theta_k)=[1,e^{-j2πdsinθ_1/λ},...,e^{-j2π(N−1)d sin θ_N / λ}]^T \] 这里 \( N \) 是传感器数量;\( d \) 是相邻两个元件之间的距离;\( λ \) 波长;而 \( θ_k \) 则是要估计的角度参数之一。 #### 实现过程 下面是一个简单的Python代码片段展示如何基于上述理论框架构建基本的FSS DOA估计算法: ```python import numpy as np def fss_doa_estimation(X, num_sources): """ 使用FSS算法进行DOA估计 参数: X : 接收数据矩阵 (N x M) N - 天线数目 M - 时间样本点数 num_sources : 需要估计的目标源的数量 返回值: doa_angles : 估计得到的方向角列表 """ Rxx = np.cov(X) eigenvalues, eigenvectors = np.linalg.eigh(Rxx) Vn = eigenvectors[:, :num_sources] angles = np.linspace(-np.pi/2, np.pi/2, 180) spectrum = [] for theta in angles: steering_vector = create_steering_vector(theta, len(X)) P_fss = 1 / abs(np.dot(Vn.T.conjugate(), steering_vector)) ** 2 spectrum.append(P_fss.sum()) peaks_indices = find_peaks(spectrum)[0][:num_sources] doa_angles = angles[peaks_indices] return doa_angles def create_steering_vector(angle, array_size): """创建给定角度下的导向向量""" wavelength = 1 element_spacing = 0.5 * wavelength k = 2 * np.pi / wavelength n = np.arange(array_size).reshape((-1, 1)) phase_shifts = k * element_spacing * np.sin(angle) * n sv = np.exp(-1j * phase_shifts.flatten()) return sv.reshape((array_size, 1)) def find_peaks(signal): from scipy.signal import argrelextrema maxima_idx = argrelextrema(signal, np.greater_equal)[0][-len(signal)//2:] minima_idx = argrelextrema(signal, np.less_equal)[0][-(len(signal)-len(maxima_idx)):] peak_positions = [] if signal[maxima_idx].max() >= signal[minima_idx].min(): peak_positions.extend(list(maxima_idx[np.where(signal[maxima_idx]==signal[maxima_idx].max())[0]])) return [peak_positions], None ``` 此段程序实现了基础版的FSS DOA估算功能,包括协方差矩阵构造、特征值分解以及峰值检测等主要环节。实际应用场景可能还需要考虑更多因素如多径效应补偿等问题。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值