特征圖注意力_從數據結構到算法:圖網絡方法初探

3059012b25fcc8f1dbae380cecb7421f.png
作者 | 朱梓豪
來源 | 機器之心
原文 | 從數據結構到算法:圖網絡方法初探

如果說 2019 年機器學習領域什么方向最火,那么必然有圖神經網絡的一席之地。其實早在很多年前,圖神經網絡就以圖嵌入、圖表示學習、網絡嵌入等別名呈現出來,其實所有的這些方法本質上都是作用在圖上的機器學習。本文將根據近兩年的綜述對圖網絡方法做一個總結,為初入圖世界的讀者提供一個總體的概覽。

什么是圖

圖是一種常見的數據結構,用于表示對象及其之間的關系。其中,對象又稱節點(node)或頂點(vertex),關系用邊(edge)來描述。在數學上一般用 G=(V,E,A,X) 來表示,其中 V={v1,v2……,vn} 是節點集合,E=e_ij 表示邊的集合,A 是大小為|V|×|V|的鄰接矩陣,用于表示節點之間的連接關系,如果 e_ij∈E,則 A_ij=1,X 是大小為|V|×d 的特征矩陣,X 的第 i 行 X_i:表示第 i 個節點的屬性特征,其中 d 是屬性的維度。

為何需要在圖上應用機器學習方法

圖是一種描述和建模復雜系統的通用語言,在真實世界中無處不在。例如,Facebook、 Twitter 等社交媒體構成了人類之間的社交網絡 (Social Network);人體中的蛋白質分子構成了生物網絡 (Biological Network);各種移動終端構成了通信網絡 (Communication Network);智能硬件之間構成了物聯網 (Internet-of-Things) 、城市間的公路、鐵路、航線構成了運輸網絡 (Transportation Network) 等等。因此也催化出一系列在圖上進行數據挖掘的任務,如為用戶推薦感興趣的好友、判斷蛋白質結構、預測交通流量、檢測異常賬戶等等。但是真實圖的數據量龐大,動輒上億節點、而且內部拓撲結構復雜,很難將傳統的圖分析方法如最短路徑、DFS、BFS、PageRank 等算法應用到這些任務上。鑒于機器學習在圖像、文本領域的廣泛應用,一部分研究者嘗試將機器學習方法和圖數據結合起來,逐漸成為機器學習領域的一股熱潮。

網絡表示學習、圖嵌入的定義

俗話說「巧婦難為無米之炊」,再強大的機器學習算法也需要數據進行支持。在同樣的數據集和任務上,由于特征的不同,同一個算法的結果也可能會有天壤之別。由于特征的選擇對結果的決定性作用,很多數據挖掘方面的研究工作把重心放到了針對特定的數據由人工設計出有價值的特征上。

e332d51d527c631cfabce194904ce6ae.png

深度學習本質上是一種特征學習方法,其思想在于將原始數據通過非線性模型轉變為更高層次的特征表示,從而獲得更抽象的表達。與人工設計特征不同,深度學習會自動從數據中學習出特征表示,所以又稱為表示學習(Representation Learning)。如圖像分類,輸出的一張高維的圖片,經過一系列的卷積池化等操作,低層可以抽取出低級的特征(輪廓、顏色)、較深的層會根據低級特征學習到更高級的特征,然后變換成一個向量通過全連接層進行分類,這個向量就是輸入圖像的特征表示。

一個很自然的想法就是,既然直接在圖上直接應用機器學習方法比較困難,那么能否先將節點或邊用低維向量表示出來,然后在這些向量上應用已經很成熟的機器學習算法。這種將圖中節點嵌入到低維歐式空間中的方法就叫做圖嵌入(Graph Embedding)。

其實、圖嵌入、網絡嵌入、圖表示學習、網絡表示學習這些名詞指的的都是同一個概念。給定圖$G=(mathbf{V,E,A,X})$,圖嵌入需要學習從節點到向量的映射:$f:v_ito mathbf{y}_i in R^d$,其中$d<<|V|$,$f$需要盡可能的保留住節點的結構信息和屬性信息。

圖嵌入方法的分類

圖數據最大的特點在于節點之間存在著鏈接關系,這表明圖中節點之間并非完全獨立。除了節點間的鏈接關系,節點自身也可能含有信息,比如互聯網中網頁節點對應的文本信息,這些特性使得圖嵌入需要考慮很多的因素。從訓練所需的信息來看,一般有三種主要的信息源:圖結構、節點屬性和節點標簽,可基于此分成無監督圖嵌入和半監督圖嵌入;還有一種是根據輸入數據的不同進行劃分,比如按照邊的方向性、是否是異構網絡等性質。然而這兩種劃分依據并不合適,因為當前圖嵌入算法的主要區別在于算法類型,同一算法類型下的框架都是相似的,因此本文基于 Hamilton 等 [1] 和 Goyal 等 [2] 兩篇關于圖嵌入的綜述,將圖嵌入方法概括為基于矩陣分解的圖嵌入、基于隨機游走的圖嵌入、基于神經網絡的圖嵌入(即圖神經網絡)。

基于矩陣分解的圖嵌入

基于矩陣分解的方法是將節點間的關系用矩陣的形式加以表示,然后分解該矩陣以得到嵌入向量。通常用于表示節點關系的矩陣包括鄰接矩陣、拉普拉斯矩陣、節點轉移概率矩陣、節點屬性矩陣等。根據矩陣的性質不同適用于不同的分解策略。主要包括 Local Linear Embedding(LLE)[3]、Laplacian Eigenmaps[4]、SPE[5]、GraRep[6] 等。

LLE 算法其實是流形學習的一種,LLE 算法認為每一個數據點都可以由其鄰域節點的線性加權組合構造得到。降維到低維空間后,這種線性關系仍然得到保留。Laplacian Eigenmaps 和 LLE 有些相似,直觀思想是希望相互間有關系的點(在圖中相連的點)在降維后的空間中盡可能的靠近。為了使得輸入圖的嵌入是低維表示并且保留圖全局拓撲結構,Shaw 等 [5] 提出在歐式空間中嵌入圖的結構保留嵌入方法(SPE,Structure Preserving Embedding),學習由一組線性不等式約束的低秩核矩陣,用于捕獲輸入圖結構。SPE 在圖的可視化和無損壓縮方面獲得明顯改善,優于 Laplacian Eigenmaps 等方法。Cao 等 [6] 認為考慮節點之間的 k 階關系對把握網絡的全局特征非常重要,考慮越高階的關系,得到的網絡表示效果會越好。GraRep 通過 SVD 分解分別學習節點的 k 階表示,然后將其結合起來作為最終的表示,這樣可以很好地捕捉到遠距離節點之間的關系。

fc290adafcb8244c77e0ef7007d2d3f3.png

基于隨機游走的方法

隨機游走方法已經被用來近似圖的許多屬性,包括節點中心性和相似性等。當圖的規模特別大或者只能觀察到部分圖的時候,隨機游走就變得非常有用。有研究者提出了利用圖上隨機游走來獲取節點表示的嵌入技術,其中最著名的就是 DeepWalk[7] 和 node2vec[8]。

DeepWalk 是基于 word2vec 詞向量提出來的。word2vec 在訓練詞向量時,將語料作為輸入數據,而圖嵌入輸入的是整張圖,兩者看似沒有任何關聯。但是 DeepWalk 的作者發現,預料中詞語出現的次數與在圖上隨機游走節點被訪問到底的次數都服從冪律分布。因此 DeepWalk 把節點當做單詞,把隨機游走得到的節點序列當做句子,然后將其直接作為 word2vec 的輸入來得到節點的嵌入表示。其框架如圖 1 所示,首先采用隨機游走的方法產生標準的輸入序列,用 SkipGram 模型對序列建模得到節點的向量表示,然后使用分層 softmax 解決節點高維度輸出問題。DeepWalk 模型的提出為圖嵌入提出了一種新的研究思路,也算是引發了對圖嵌入研究的熱潮。

8d920ea3b53ff6c8e4ca647ef287162e.png

node2vec 通過改變生成隨機游走序列的方式改進了 DeepWalk 算法。DeepWalk 是按照均勻分布隨機選取隨機游走序列的下一個節點。node2vec 同時考慮了廣度優先搜索 (BFS) 和深度優先搜索 (DFS)。Grover 等發現,廣度優先搜索注重刻畫網絡中的局部特征,而深度優先搜索能更好地遍歷整個網絡,反映了節點間的同質性。特別地,node2vec 引入 search bias 函數來平衡這兩種采樣方式,通過參數 p 和 q 來調整下一步的跳轉概率。

其他基于隨機游走的方法還包括 Walklets、LsNet2vec、TriDNR、HARP、DDRW 等等。

基于神經網絡的圖嵌入(圖神經網絡)

還有一類方法是將神經網絡和圖結合起來的圖表示學習方法,也是最近一年來最火的方向之一,我們統稱為圖神經網絡。機器之心已經為其做過了全面的介紹,具體請參見:深度學習時代的圖模型,清華發文綜述圖網絡 、清華大學圖神經網絡綜述:模型與應用、圖神經網絡概述第三彈:來自 IEEE Fellow 的 GNN 綜述。主要將其分為圖卷積網絡、圖注意力網絡、圖生產網絡、圖時空網絡、圖自編碼器。又可以分為基于譜的方法和基于空間的方法。由于基于譜的方法需要分解矩陣特征向量,因此絕大多數新提出的方法都是基于空間,也就是如何傳播并聚合節點和邊的信息。圖像和文本本質上是有規則的格柵結構的圖,因此,很自然想到可以將已經在 CV、NLP 領域成功應用的模型拓展到圖上,如詞向量和圖卷積。最近,也出現了基于膠囊的圖神經網絡和基于圖像語義分割 U-Net 模型的 Graph U-Net。

注意力機制的在圖嵌入的應用

有一部分研究者將注意力 (attention) 機制引入到了圖神經網絡中。注意力機制的本質是從人類視覺注意力機制中獲得靈感。大致是我們視覺在感知東西的時候,一般不會是一個場景從到頭看到尾全部都看,而是根據需求觀察特定的一部分。這意味著,當人們注意到某個目標或某個場景時,該目標內部以及該場景內每一處空間位置上的注意力分布是不一樣的。而且當我們發現一個場景經常在某部分出現自己想觀察的東西時,我們就會進行學習在將來再出現類似場景時把注意力放到該部分上。更通用的解釋就是,注意力機制是根據當前的某個狀態,從已有的大量信息中選擇性的關注部分信息的方法,其實就是一系列 注意力分配系數。

基于注意力機制的 GNN 的思想是在計算每個節點的表示的時候,首先計算其和鄰居節點之間的注意力系數,為重要的鄰居節點分配較大的權重,在聚合的過程中將不同的重要性分配給鄰域內不同的節點。

表 1 按照輸入、輸出、任務對近兩年發表的基于注意力機制的圖神經網絡模型進行匯總比較,下面對幾個具有代表性的模型進行概述,具體內容請參照論文《Attention Models in Graphs: A Survey》[9]。

95d01c064c13a6fb2091884673b29aa2.png

Yoshua Bengio 的 MILA 團隊在 2018 年提出了圖注意力網絡 (Graph Attention Networks, GAT)[10],論文中定義了 Graph attention 層,通過疊加不同的 attention 層,可以組成任意結構的圖神經網絡,其架構如圖所示,最終要的步驟就

4a7db72d1f9371e26626542d762d2a41.png

不同于 GAT 是節點分類,DAGCN[11] 用于圖分類任務。模型中包括兩個 attention 單元,一個是和 GAT 一樣,用于圖卷積得到節點的表示,另一個是基于 attention 的池化操作,得到整個圖的表示,然后將圖表示輸入到一個 MLP 得到整個圖的分類。作者認為,經典的 GCN 每一層都只能捕獲第 k-hop 鄰域的結構信息,只有最后一層的 H 被用下一步的預測,隨著網絡層數的增多,會丟失大量的信息。作者提出的 attention 層的思想是不僅要依賴于第 k-hop 的結果, 還要從前面每一個 hop 捕獲有價值的信息。

綜合各種圖注意力網絡的論文來看,最主要的區別在于如何定義和實現注意力機制。第一類是學習 attention weights:

a6aa73077e4a21caa0431c1ebcdaedff.png

主要是通過 softmax 函數實現的,同時還需要一個基于節點屬性可訓練的計算節點 j 和節點 0 相關性的函數,例如 GAT 的實現方式為:

664dd8ce11ccd2e4beafe682170ae61d.png

其中 W 是將節點屬性映射到隱空間的可訓練的參數矩陣,||表示串接。

第二類基于相似度的 attention,同樣,給定相應的屬性或特征,第二種注意力的學習方法與上面的方法類似,但有一個關鍵的區別是更多的注意力集中在具有更多相似隱藏表示或特征的節點上,這在文獻中也經常被稱為對齊。以 AGNN 中的公式為例:

f10bbc45faad463c0bdbe180c1c5f61d.png

其中 cos 來計算余弦相似度,可以看到和上式非常相似。不同之處在于,模型顯式地為彼此相關的對象學習類似的隱藏嵌入,因為注意力是基于相似性或對齊的。

前兩種注意力主要集中在選擇相關信息以整合到目標對象的隱藏表示中,而第三種注意力的目的略有不同,叫做基于注意力的游走。舉例來說,在一個輸入圖上執行一系列游走,并使用 RNN 對訪問的節點信息進行編碼,從而構造一個子圖嵌入。RNN 的 t 時刻的隱藏狀態對 1 到 t 訪問的節點進行編碼。Attention 就是一個函數$f』(h_t)=r_{t+1}$, 輸入的是 t 時刻的隱藏狀態,輸出一個 rank vector,告訴我們下一步我們應該優先考慮哪種類型的節點

框架

這里簡單的介紹一下 Hamilton 在論文 [1] 中提出的一種圖嵌入 encoder-decoder 框架(如圖),可以將大多數的圖嵌入方法用這個框架來表示。在這個框架中,我們圍繞兩個關鍵的映射函數組織了各種方法:一個 encoder(它將每個節點映射到一個低維向量) 和一個 decoder(它從已知的嵌入中解碼關于圖的結構信息)。encoder-decoder 背后的直覺想法是這樣的:如果我們能從低位嵌入表示中學會解碼高維圖信息,如節點在圖中的全局位置或節點的局部鄰域結構,那么原則上,這些嵌入應包含下游機器學習任務所需的所有信息。

e370d93d62105c14d09083b48642a836.png

encoder 是一個函數:

1f830a8d0f7c9c764035250fc5391a40.png

將節點 i 映射到嵌入向量$z_i in R^d$。decoder 是接受一組節點嵌入并從這些嵌入中解碼用戶指定的圖統計數據的函數。例如,decoder 可能根據節點的嵌入預測節點之間是否存在邊,或者可能預測圖中節點所屬的社區。原則上,有許多 decoder 都是可以使用的,但是在大多數工作中使用的是成對 decoder:

ff163ff2d1173ecbf38501f0f56dd1ca.png

當我們將成對 decoder 應用于一對嵌入$(z_i,z_j)$時,我們得到了原始圖中$v_i$和$v_j$之間相似性的重構,目標就是最小化重構后的相似性和原圖中相似性的誤差:

1375e93a53db7ba48550a2d461e5a443.png

其中其中 SG 是一個用戶定義的、在圖 G 上的的節點間相似性度量。換句話說,目標是優化 encoder-decoder 模型,可以從低維節點嵌入 z_i 和 z_j 中解碼出原始圖中 SG(v_i, v_j) 成對節點相似性。例如可以設 SG(v_i, v_j)=A_{ij},如果節點相鄰則定義節點的相似度為 1,否則為 0。或者可以根據在圖 G 上的固定長度隨機游走 v_i 和 v_j 共線的概率來定義 SG。在實踐中,大多數方法通過最小化節點對集合 D 上的經驗損失 L 來實現重構目標:

c08291eb928fa169243fb6c120ab7f53.png

優化了上述目標函數后,我們就可以使用經過訓練的 encoder 為節點生成嵌入,然后可以將其用作下游機器學習任務的特征輸入。下表展示了常用圖嵌入方法的 encoder-decoder 框架描述。

c18c6d639f1666a191e6944ba5ae522c.png

總結

圖嵌入是指將圖中節點用低維稠密向量來表示,從一開始的基于矩陣分解的方法逐漸出現了基于隨機游走的方法,后來又演化出基于神經網絡的方法也是我們經常聽到的圖神經網絡。圖嵌入目前還面臨著一些挑戰,例如如何在超大規模圖上高效進行分析,如何應對真實世界中不斷變化的動態圖,如何對圖神經網絡的黑盒模型進行解釋,以及如何建模異質圖。目前在圖網絡領域也涌現出一些新的方向,例如如何針對圖網絡進行對抗攻擊使其模型性能大幅下降,相反的就是如何提高模型的魯棒性;如何將人工設計網絡架構轉變為由機器自動設計,這對應著網絡結構搜索問題(NAS),以及如何將圖網絡和計算機視覺、自然語言處理等方向結合起來。這些都是很有價值也有意思的方向,感興趣的讀者可以進行更深度的研究。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454537.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454537.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454537.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FFMPEG 源碼分析

FFMPEG基本概念&#xff1a; ffmpeg是一個開源的編解碼框架&#xff0c;它提供了一個音視頻錄制&#xff0c;解碼和編碼庫。FFMPEG是在linux下開發的&#xff0c;但也有windows下的編譯版本。 ffmpeg項目由以下幾部分組成: ffmpeg 視頻文件轉換命令行工具,也支持經過實時電視…

面試之 Redis匯總

簡介 Redis 持久化機制 RDB&#xff08;Redis DataBase&#xff09; AOF&#xff08;Append-only file&#xff09; Redis 4.0 對于持久化機制的優化 補充&#xff1a;AOF 重寫 二者的區別 二者優缺點 Memcache與Redis的區別都有哪些&#xff1f; 緩存雪崩、緩存穿透、…

Oracle 10g 問題集錦

監聽服務中Oracle數據庫之中使用最主要的一個服務&#xff0c;但是這個服務經常會出現錯誤&#xff0c;包括以后在工作之中此服務也會出現錯誤&#xff0c;故給出兩種常見錯誤的解決方案&#xff08;故障1、故障2&#xff09; 故障1: 注冊表使用了優化軟件&#xff08;如&#…

iOS linker command failed with exit code 1 (use -v to see invocation)多種解決方案匯總

有時可能會遇到這種錯誤&#xff0c;關鍵是這種錯誤&#xff0c;有時只有這一句話&#xff0c;也不會給更多錯誤信息。 網上找了一些&#xff0c;總結了如下&#xff1a;&#xff08;PS&#xff1a;以下是按照解決簡易程度排序&#xff0c;不代表出現概率&#xff09; 1、bitco…

計算機二級python選擇題題庫_2018年計算機二級python題庫精編(1)

1正則中的^符號&#xff0c;用在一對中括號中則表示要匹配() A.字符串的開始 B.除中括號內的其它字符 C.字符串的結束 D.僅中括號內含有的字符 2靜態成員變量稱為類變量&#xff0c;非靜態成員變量稱為實例變量&#xff0c;下列關于一個類的靜態成員的描述中&#xff0c;不正確…

非常好用!世界上最快最好的視頻壓縮轉換工具(精品)

測試了20多款 各種視頻壓縮 截取軟件 真的是這款最快 快好用 效果也好&#xff01;&#xff01;&#xff01; 最快的視頻轉換壓縮工具。 WisMencoder 能夠把您的電腦上的所有視頻格式&#xff0c;包括avi,mpg,rmvb,wmv,mp4,mov,dat等格式以最快的速度和最高的質量轉換為…

面試之 Mysql 匯總

事務相關 什么是事務&#xff1f; 事務&#xff1a;是由一組SQL語句組成的邏輯處理單元&#xff0c;事務具有以下4個屬性&#xff0c;通常簡稱為事務。事務的ACID屬性&#xff1a; &#xff08;1&#xff09;原子性&#xff08;Atomicity&#xff09;&#xff1a;   事務是一…

Exchange Server 2003 部署手冊

1. 環境需求服務器: 域控制器1臺; Exchange Server服務器1臺。 IP和機器名配置&#xff1a; 域控制器&#xff1a;機器名&#xff1a;dc IP&#xff1a; 10.10.10.200 掩碼&#xff1a;255.255.255.0 網關&#xff1a;10.10.10.254 DNS&#xff1a;127.0.0.1 Exchange&#xff…

app中 html5 search 事件,事件 - Cordova中文網

事件Cordova給我們提供了很多的事件&#xff0c;可以在應用程序中使用。應用程序代碼中可以添加這些事件的監聽。例如:HTML文件Device Ready ExampleJS文件// example.js文件// 等待設備API庫加載好//function onLoad() {document.addEventListener("deviceready", o…

python標準庫os中的方法_python中OS常用方法

下面列出了一些在os模塊中比較有用的部分。它們中的大多數都簡單明了。 os.sep可以取代操作系統特定的路徑分隔符。windows下為 “\\” os.name字符串指示你正在使用的平臺。比如對于Windows&#xff0c;它是nt&#xff0c;而對于Linux/Unix用戶&#xff0c;它是posix。 os.get…

ffmpeg 過程分析

簡介 FFmpeg是一個集錄制、轉換、音/視頻編碼解碼功能為一體的完整的開源解決方案。FFmpeg的開發是基于Linux操作系統&#xff0c;但是可以在大多數操作系統中編譯和使用。FFmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多種編碼&#xff0c;AVI、MPEG、OGG、Matroska、ASF等…

面試之 Python 基礎

1&#xff1a;為什么學習Python 家里有在這個IT圈子里面&#xff0c;也想讓我接觸這個圈子&#xff0c;然后給我建議學的Python&#xff0c;然后自己通過百度和向有學過Python的同學了解了Python&#xff0c;Python這門語言&#xff0c;入門比較簡單&#xff0c;它簡單易學&…

學習筆記(11月08日)--異常

四周三次課&#xff08;11月8日&#xff09;異常即是一個事件&#xff0c;該事件會在程序執行過程中發生&#xff0c;影響了程序的正常執行。一般情況下&#xff0c;在Python無法正常處理程序時就會發生一個異常。異常是Python對象&#xff0c;表示一個錯誤。當Python腳本發生異…

html瀏覽器的區別是什么意思,不同瀏覽器對css的識別有區別嗎?

不同瀏覽器對css的識別是有區別&#xff0c;因此針對不同的瀏覽器去寫不同的CSS。下面本篇文章給大家介紹一些常用CSS書寫技巧(不同瀏覽器之間的差異)。有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對大家有所幫助。不同的瀏覽器&#xff0c;比如Int…

關于python

你是如何自學 Python 的&#xff1f; https://www.zhihu.com/question/20702054 Python 的練手項目有哪些值得推薦&#xff1f;https://www.zhihu.com/question/29372574 Python編碼規范 -- Python Style Guide http://www.cnblogs.com/lxw0109/p/Python-Style-Guide.htm…

python讀寫文件的文本模式_Python中文件的讀寫、寫讀和追加寫讀三種模式的特點...

本文主要討論一下文件的三種可讀可寫模式的特點及互相之間的區別,以及能否實現修改文件的操作 由于前文已經討論過編碼的事情了&#xff0c;所以這里不再研究編碼&#xff0c;所有打開操作默認都是utf-8編碼&#xff08;Linux系統下&#xff09; 首先我們看r&#xff08;讀寫&a…

html顏色疊加代碼,html代碼大全(基礎使用代碼)(顏色代碼完整版)

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓您在使用以下基礎使用代碼時請把{}換成<>&#xff01;&#xff01;&#xff01;)(這樣這個命令才成立&#xff01;&#xff01;&#xff01;)基礎使用代碼&#xff1a;1)貼圖&#xff1a;{img src"圖片地址"}2)加入…

如何看懂源代碼

如何看懂源代碼--(分析源代碼方法) 【轉載】 由于今日計劃著要看Struts 開源框架的源代碼 昨天看了一個小時稍微有點頭緒,可是這個速度本人表示非常不滿意,先去找了下資料, 覺得不錯... 摘自(繁體中文Traditional Chinese):http://www.ithome.com.tw/itadm/article.php?c477…

面試之 Python 進階

前端相關 1.談談你對http協議的認識。 瀏覽器本質&#xff0c;socket客戶端遵循Http協議   HTTP協議本質&#xff1a;通過\r\n分割的規范 請求響應之后斷開鏈接 > 無狀態、 短連接 具體&#xff1a;   Http協議是建立在tcp之上的&#xff0c;是一種規范&#xff0c;它…

Lync Server外部訪問系列PART5:模擬公網DNS

因為要實現外部用戶訪問&#xff0c;所以我們必然需要在公網DNS中添加我們所需要的一些A記錄&#xff0c;而這樣的測試需要我們擁有一個公網的域名以及一個可發布、可訪問的IP。如果沒有的話就沒辦法這樣測試&#xff0c;所以我們今天在物理局域網中搭建一臺DNS服務器&#xff…