모각코(개인 활동 계획)

모각코 첫 번째 모임 개인 계획, 활동과정 및 결과

Beige00 2024. 1. 6. 10:25

이번 모각코에서는 현재 작성중인 "IRSML 알고리즘 실제 구현" 을 공부할 것이다.

 

구체적으로는 저번 시간까지 SL phase를 거의 다 작성했으므로 이번 모각코에서 SL phase 구현을 마무리하고, RL phase를 구현하며,

어떻게 Simulation을 진행할지에 대해 공부할 계획이다.

 

또한 팀장으로써 앞으로 모각코 모임 일정을 정하고, 전체적으로 매 모임마다 어떻게 진행할 지 형식을 정할 것이다.


활동 과정 : IRSML의 SL, RL Phase 구현 idea

 

이전에 공부한 내용까지는 SL phase의 구현까지였다.

IRSML에서 SL phase 구현을 요약해보면, Simulation Network를 OMNeT++, INET framework 2.0을 활용해

Simulation Parameters

다음과 같은 환경으로 구성하고, 1020번 가량 시뮬레이션을 돌려 Data set을 뽑아낸다.

그 후 그렇게 구성된 1020개의 각 Simulation Network data "Z"에 대해 다음과 같은 알고리즘을 적용한다.

Z
//Simulation Network

F(ρ,L)
/*After Simulation, determin regression function of PBP(i,j) with variables of the trafficload, 
QueueLength*/

Q, βr, Tr = n*n*n size tensor
// (source) * (inter) * (destination)

Bh, R = n*n matrix
// (source)*(destination)

model 
//non-linear Regression model for predict PBP (Use F(ρ,L))

for(i= 1~N, i++) do
   for(j=1~N, j++) do
        //N은 network 상의 node의 갯수
   		if(j == i) then continue
        Q(i,j,d) = inf.
        βr(i,j,d) = 0
        Tr(i,j,d) = 0
        if(Z.getNode(j).isNeighbor(i)) then
          Bh(i,j) = model.(Z.getρ(i,j), Z.getL(i,j)) //Predict PBP(i,j)
          R(i,j) = Bh(i,j)
        else
          R(i,j) = inf.
        end if
    end for
end for
// Q-val tensor는 max 값으로 초기화
// SNR, EED tensor는 0으로 전부 초기화.
// PBP matrix는 i와 j가 이웃 노드일 때 predicted PBP로 init.
// Reward matrix는 i,j가 이웃 노드일 때 PBP 값. else inf.

for(d=1~N, d++) do
	for(k=1~N, k++) do
		if(Z.getNode(k).isNeghbor(d)) then
			Q(k,d,d) = Z.getPBP(k,d)
			βr(k,d,d) = Z.getSNR(k,d)
			Tr(k,d,d) = Z.getEED(k,d)
		end if
         //k,d는 이웃노드이기 때문에 구하기 가능.
    end for
end for
// 이웃노드 간의 값을 실제로 측정된 초기 값으로 설정(이 후 RL을 통한 예측 시작)

 

(직접 작성한 알고리즘이라 오류가 존재할 수 있다.)

해당 Supervise Phase가 끝나게 되면, Q-val. tensor는 이웃한 k,d에 대해 Q(k,d,d)의 값들만 실제 측정된 route PBP 값으로 초기화되고, 나머지는 전부 max 값으로 초기화 되며, SNR, EED 역시 이웃한 k,d 외 값들은 0으로 초기화된다.

이렇게 SL regression model을 통해 예측된 predicted value set을 가지고 RL phase로 들어가는 것이다.

이때 이 SL regression model의 형태는 다음과 같다.

PBP regression function
EED regression function

이 블로그에 IRSML에 대해 자세히 다룬 글이 있으므로 constant term에 대해서는 다루지 않겠다.

해당 model들의 evaluation value는 다음과 같다.

PBP, EED regression predict result

여기까지 기존까지 구현한 SL phase였다.

 

이번 모각코 활동에서는 RL phase로 넘어가기 이전 SL phase의 eval. procedure에 대해 생각을 하게 되었다.

해당 논문에서는 어떤 feature가 data set에 존재하고, 어떤 구조로 Constant term을 뽑아낸지를 작성하지 않았다.

MATLAB Fitting tool을 활용하였다고는 했는데  관련 내용을 공부한 상태가 아니라 어떤 식으로 활용이 가능할 지를 모르겠다. 따라서 해당 내용을 조금 찾아본 결과 다음의 블로그에서 어떤 식으로 검증이 이루어졌을지 알 수 있었다.

(https://blog.naver.com/lagrange0115/220680744561)

 

요약하자면, MATLAB의 커브 피팅 툴 박스를 사용했고, OMNeT++, INET framework 2.0을 사용해 생성한 Simulation data 를 해당 툴에 적용한 것 같다. 이때, Fitting 된 function의 형태를 보면, 예측을 해내기 위한 parameter term 'Traffic load (ρ)', 'Queue Length (L)' 에 대해 각각 5차식까지 사용된 것을 볼 수 있다. 여기서 실제로 시뮬레이션 하는 법을 배워 시뮬레이션을 하면서 생각해줄 점이 하나 더 보였는데, Traffic load는 erlang 단위이고, Queue Length는 packet 단위인 것이다.

Regression model은 그냥 덧셈을 해주는데, 내가 보기엔 무언가 Normalization 과정이 필요해보인다.

 

아무튼 여기까지 SL phase 과정과 그 evaluation 과정까지 살펴보았고, 그 다음에는 RL phase를 살펴보자.

 

RL

우선  number of learning ' Δ '는 파라미터로 간주한다.

그러면 해당 알고리즘에서 우선적으로 할 일은 학습할 Route 의 source와 InterNode a를 선정하는 것이다.

(그래야 Q(s,a,d) tensor에 값을 넣는다.)

 

더보기

! RL의 목표

만약 모든 Q(a,b,c) tensor의 값을 학습하여 구성해둔다면, Q(s,a,d) route의 Optimal Route를 찾기 위해서는

단순히 node d에 도착할 때까지 Q(s,a,b) 값이 가장 작은 b를 선정해서 이동 -> Q(a,b,c) 값이 가장 작은 c를 선정해서 이동... 을 반복하면 될 것이다.

그 후, a -> b -> d 값이 최소화된 b를 선정한다면 Q(s,a,d) 값을 최소화 시키는 inter node라고 간주할 수 있다.

따라서 초기 값이 max인 minQ를 하나 만들어 network 안에 존재하는 s,a를 제외한 나머지 모든 노드를 선형 탐색하며 minQ 값을 가지는 노드 'b'들을 찾는다. ( O(N) )

이렇게 a->b->d route의 PBP를 최소화시키는 b들을 찾았다면, Nmin 이라는 set에 전부 추가시킨다.

이 과정이 끝나게 되면 자동적으로 Nmin에서 어떤 node를 뽑던간에 다음의 조건을 만족하는 b'이 될 것이다.

b' condition

그럼 해당 route가 d로 향하는 route(s->a->b->d) 중 가장 선택했을 때 PBP가 작아지는 route임을 알 수 있다.

(s->a는 이미 가기로 확정이 된 상태임)

따라서 이제 해줘야할 것은 해당 route의 QoT, EED Constraint 만족 여부를 확인하고 learning rate를 정해준 다음, Q-val function에 따라 update해주면 되는 것이다. 

이를 임시 Pseudo code로 구현했다.

Z
//Simulation Network

F(ρ,L)
/*After Simulation, determin regression function of PBP(i,j) with variables of the trafficload, 
QueueLength*/

Q, βr, Tr = n*n*n size tensor
// (source) * (inter) * (destination)

Bh, R = n*n matrix
// (source)*(destination)

model 
//non-linear Regression model for predict PBP (Use F(ρ,L))

//SL phase
for(i= 1~N, i++) do
   for(j=1~N, j++) do
        //N은 network 상의 node의 갯수
   		if(j == i) then continue
        Q(i,j,d) = inf.
        βr(i,j,d) = 0
        Tr(i,j,d) = 0
        if(Z.getNode(j).isNeighbor(i)) then
          Bh(i,j) = model.(Z.getρ(i,j), Z.getL(i,j)) //Predict PBP(i,j)
          R(i,j) = Bh(i,j)
        else
          R(i,j) = inf.
        end if
    end for
end for
// Q-val tensor는 max 값으로 초기화
// SNR, EED tensor는 0으로 전부 초기화.
// PBP matrix는 i와 j가 이웃 노드일 때 predicted PBP로 init.
// Reward matrix는 i,j가 이웃 노드일 때 PBP 값. else inf.

for(d=1~N, d++) do
	for(k=1~N, k++) do
		if(Z.getNode(k).isNeghbor(d)) then
			Q(k,d,d) = Z.getPBP(k,d)
			βr(k,d,d) = Z.getSNR(k,d)
			Tr(k,d,d) = Z.getEED(k,d)
		end if
         //k,d는 이웃노드이기 때문에 구하기 가능.
    end for
end for
// 이웃노드 간의 값을 실제로 측정된 초기 값으로 설정

//RL phase
for( n = 1~Δ, n++ ) do
	s = random(1,N);
    a = random(1,N);
    while(true) do 
    	if(s==a) then 
        	a = random(1,N);
            continue;
        end if
    	break;
    end while
    minQ = inf.;
    for( i = 1~N, i++ ) do
    //N은 network 상의 node 갯수
        if((i == s) || (i == a)) then
        	continue;
        end if
        if(minQ > Q(a,b,d)) then
        	minQ = Q(a,b,d)
        end if
    end for
    
    Nmin = new Set();
    for( i = 1~N; i++ ) do
    	if((i == s) || (i == a)) then
        	continue;
        end if
        if(Q(a,i,d) == minQ) then
        	Nmin.add(i);
        end if
    end for
    
    b = Nmin.get(random(1,L)); 
    //L = Queue Length
    βr(s,a,d) = SNRupdateFunction(s,d);
    Tr(s,a,d) = EEDupdateFunction(s,a,b,d);
    if((βr(s,a,d) < reqSNR) || (Tr(s,a,d) > limEED)) then
   		α = 0;
    else
    	α = 1;
    end if
    Q(s,a,d) = QvalupdateFunction(s,a,d);
end for

 

본 과정이 끝나면 결과로 Q-val matrix를 얻게 될 것이며, 해당 값을 통해 SDN controller의 flow switch table를 update 해주어야할 것이다.

이 과정 및 구현 상 예상되는 문제점이나 논문의 아쉬운 점은 모각코 모임이 끝나고 따로 작성할 것이다.