목록전체 글 (142)
Just Fighting
'Transformer(트랜스포머)'라고 하는 간단한 네트워크 아키텍처를 새롭게 제안 반복과 컨볼루션을 완전히 없애고, 어텐션 매커니즘을 기반으로 하는 아키텍쳐=> 보다 병렬적. 학습하는 데 상당히 적은 시간 소요. 질적으로 우수함. 1. Introduction RNN, LSTM, GRN은 언어 모델링이나 기계학습과 같은 시퀀스 모델링이나 번역에 사용하는 최신 기술.이런 접근은 순환 언어 모델과 인코더-디코더 아키텍처의 경계를 계속 넓히는 중 - Recurrent Model 순환 모델입력과 출력의 시퀀스의 *심볼 위치에 따라 계산 진행이전 은닉상태 $h_{t-1}$과 $t$시점의 입력의 함수로 $h_t$의 시퀀스를 생성*심볼 : 처리되는 데이터의 기본 단위. 문자, 단어 등 그러나, 순환적..
어드밴티지 액터-크리틱 알고리즘의 단점 몬테카를로 업데이트 문제와 목적함수 그래디언트의 분산이 크다는 점은 개선 완료 but ! 여전히 온-폴리시(on-policy) 온-폴리시 방법은 정책을 업데이트하기 위해서 해당 정책을 실행시켜 발생한 샘플이 필요하기 때문에 효율성이 떨어진다. 두번째 단점은 정책 그리디언트를 이용한다는 것. 정책 파라미터 변화량이 작아도 정책 자체는 크게 변할 수 있다는 단점이 있다. 정책이 점진적으로 업데이트돼야만 안정적인 학습이 가능하기 때문! 이를 개선할 수 있는 대표적인 알고리즘이 PPO(proximal policy optimization, 근접 정책 최적화)이다. PPO 알고리즘 A2C에서 사용된 목적함수 그래디언트는 다음과 같다. \begin{align*} \bigtria..
A3C의 실행하는 과정의 전반적인 흐름을 코드로 공부해보자. ① 환경 초기화 # 상태변수, 행동, 보상을 저장할 배치는 초기화한다. batch_state, batch_action, batch_reward = [], [], [] # 환경을 초기화하고 환경으로부터 첫번째 상태변수 x0를 측정한다. step, episode_reward, done = 0, 0, False state = self.env_reset() ②-1. 행동 선택 # 워커의 액터 신경망을 이용해 행동을 샘플링한다. action = self.get_action(tf.convert_to_tensor([state], dtype=tf.float32)) # 행동이 범위 [-2, 2]를 벗어나지 않도록 제한 action = np.clip(action..
목적함수의 그래디언트를 계산할 때, 어드밴티지가 편향 없이 작은 분산값을 갖도록 추정하는 것이 중요하다. A2C 알고리즘에서는 가치함수를 근사하는 함수 $V_{\phi} (x_t)$를 다음과 같이 1-스텝 관계식을 이용해 추정한다. $$V_{\phi} (x_t) \approx r(x_t, u_t) + \gamma V_{\phi} (x_{t+1})$$ 어드밴티지도 1-스텝 관계식을 이용해 근사적으로 계산한다. $$A_{\phi} (x_t, u_t) \approx r(x_t, u_t) + \gamma V_{\phi} (x_{t+1}) - V_{\phi}(x_t)$$ 1-스텝 관계식을 이용하면 어드밴티지 추정값의 분산은 작지만, 상태가치의 추정 정확도에 따라 어드밴티지 추정값에 큰 편향이 있을 수 있다. 무한..
2차원 데이터에서 최외곽선을 표시하기 위한 함수 convexHull, alphashape 함수에 대해서 정리하고자 한다. ConvexHull 모든 데이터를 다 포함하는 외곽선을 그려주는 함수이다. from scipy.spatial import ConvexHull # 랜덤한 점 10개 x = [random.randint(1,10) for i in range(10)] y = [random.randint(1,10) for i in range(10)] # convex hull 구하기 points = np.array([list(p) for p in zip(x,y)]) hull = ConvexHull(points) # 시각화 plt.scatter(x,y) for s in hull.simplices: plt.plot..
앞서 어드밴티지 액터-크리틱(A2C) 알고리즘에 대해 다뤘다. A2C 알고치즘은 에피소드가 끝날 때까지 기다릴 필요 없이 샘플이 모이면 정책을 업데이트하고, 그래디언트의 분산을 줄였다. 그러나, A2C의 문제점은 샘플이 시간적으로 상관되어 있다는 것이다. 샘플 간의 높은 상관관계는 목적함수의 그래디언트를 편향시키고, 학습을 불안정하게 만들 수 있다. 또한, 학습 배치에 있는 서로 유사한 데이터는 신경망을 비슷한 방향으로 업데이트하게 된다. 위와 같은 문제점을 개선하기 위해 비동기 A2C(A3C, asynchronous advantage actor-critic) 알고리즘에 대해 공부한다. 샘플의 상관관계 어드밴티지 액터-크리틱에서 사용한 목적함수의 그래디언트 식은 다음과 같다. \begin{align*} ..
복습 실습에 앞서, 액터-크리틱 알고리즘의 순서에 대해 다시 되짚어보자 ! 2023.06.27 - [분류 전체보기] - [강화학습] AC2 알고리즘 1. 크리틱과 액터 신경망의 파라미터 $\phi$, $\theta$ 초기화 2. 반복 2-1. 반복 2-1-1. 정책 $u_i \sim \phi_\theta(u_i|x_i)$으로 행동을 확률적으로 선택 2-1-2. $u_i$를 실행해 보상 $r(x_i,u_i)$과 다음 상태변수 $x_{i+1}$ 측정 2-1-3. 샘플 $(x_i, u_i, r(x_i,u_i), x_{i+1})$ 저장 2-2. 시간차 타깃 계산 2-3. 크리틱 신경망 손실함수 계산 2-4. 어드밴티지 계산 2-5. 크리틱 신경망 업데이트 2-6. 액터 신경망 업데이트 위의 순서대로 코드를 정리..
빈 이중 배열을 미리 선언하고, 그 배열에 값을 하나씩 넣고자 했을 때 아래 코드를 사용했다. 그리고 그 결과는 다음과 같다. lli = [[]]*2 for i in range(2): for j in range(1,5): lli[i].append(j) print(lli) 내가 원하던 결과는 [[1,2,3,4,5],[1,2,3,4,5]]인데, 이렇게 나와서 이유를 찾아보니, 빈 배열인 경우에는 그 안에 포함된 모든 배열이 같은 주솟값을 갖는다고 한다. 이렇게 또 하나를 깨달았다..!
목적함수 그래디언트 계산 목적함수 그래디언트는 샘플링 기법을 이용하면 다음과 같이 근사적으로 계산할 수 있다. \begin{align*} \bigtriangledown_\theta J(\theta) &\approx \sum_{t=0}^{T} \left( \frac{1}{M} \sum_{m=1}^{M} \left ( \bigtriangledown_\theta log \pi_\theta (u_t^{(m)}|x_t^{(m)}) A^{\pi_\theta}(x_t^{(m)}, u_t^{(m)}) \right ) \right ) \\ \end{align*} 여기서, m은 에피소드 인덱스이며, M은 에피소드 개수다. 한 개의 에피소드만 고려하면 목적함수는 근사적으로 다음과 같다. \begin{align*} \bigt..
목적함수 그래디언트의 분산이 크면, 업데이트될 정책 파라미터 값이 들쭉날쭉해져 신경망 학습이 불안정해지며, 정책의 불확실성도 커진다. \begin{align*} \bigtriangledown_\theta J(\theta) &= \sum_{t=0}^{T} \left ( \int_{x_t,u_t}^{} \bigtriangledown_\theta log \pi_\theta (u_t|x_t) Q^{\pi_\theta}(x_t, u_t) \pi_\theta (u_t| x_t) p_\theta(x_t)] dx_t du_t \right ) \\ &= \sum_{t=0}^{T}\left(E_{x_t \sim p_{\theta(x_t),u_t\sim\pi_\theta(u_t|x_t..