동시성 | 병렬성 |
---|---|
하나의 processor가 여러 task를 동시에 수행함 | 유사한 task를 여러 processor가 동시에 수행하는 것 |
동시성이 요구될 때 병렬성의 효율을 극대화할 수 있다.
⇒ 여러 개의 프로세스가 한 개의 task를 여러 개의 subtask로 쪼개어 동시에 병렬적으로 수행할 수 있기 때문
동시성에서 주로 다루는 개념
동기 | 비동기 |
---|---|
앞선 작업이 종료되기를 기다렸다가 다음 작업을 수행하는 방식 | 바운드(어떤 일을 바로 하지 못하고 대기해야할 때를 의미)되고 있는 작업을 기다리는 동안 다른 일을 처리하는 방식 |
순차진행. <요청-응답>의 형태가 연속적으로 실행. 요청에 지연이 발생할 경우 대기 | 비순차 진행. 특정 코드의 연산이 끝날 때까지 코드의 실행을 중단하지 않음. 다음 코드를 먼저 실행하며, 중간에 실행되는 코드는 보통 콜백함수로 연결함 |
I/O Bound | CPU Bound |
---|---|
입,출력에서 데이터 처리에 시간이 소요될 때 | CPU바운드: 복잡한 수식 계산, 그래픽 작업과 같이 계산량이 큰 경우 |
Scale up | Scale out |
---|---|
단일 서버(하드웨어)의 성능을 증가시켜서 더 많은 요청을 처리하는 방법(하나의 컴퓨터 성능을 최적화) | 동일한 사양의 새로운 서버를 추가, 성능을 향상 시키는 방법(여러 대의 컴퓨터를 한 대처럼 이용) |
✔✔✔🤔 은닉층에서 계산된 은닉 상태와 출력층에서의 결과는 뭐가 다를까?
- 계산식에서의 차이
은닉층 : $h_{t} = tanh(W_{x} x_{t} + W_{h}h_{t−1} + b)$ 출력층 : $y_{t} = f(W_{y}h_{t} + b)$ 단, 는 비선형 활성화 함수 중 하나. - 은닉 상태는 tanh 함수를 이용해 계산하는 값 - 출력층에서 출력되는 값은 은닉상태와 가중치를 곱하고 bias를 더한 값을 이용해 계산한 값 - 처음 들어오는 은닉상태의 경우 0으로 초기화
✔✔✔🤔 장기 의존성 문제: 은닉상태가 뒤로 갈 수록 앞선 정보를 기억하지 못한다는 것은 무슨 의미일까?
은닉상태는 셀이 계산하는 과정에 반영된다. 첫 번째 타임 스텝에서 두 번째 타임 스텝으로 넘어간다고 했을 때, 첫 번째 타임 스텝에서 계산된 은닉상태가 두 번째 타임 스텝에서의 은닉상태 계산에 이용된다. 그러면 두 번째 타임 스텝에서의 은닉 상태는 첫 번째, 두 번째 타임 스텝의 은닉 상태에 대한 정보를 담게 된다. 그리고 세 번째 타임 스텝으로 가면 세 번째 타임 스텝 계산에서 앞선 경우와 같이 두 번째 타임 스텝의 은닉 상태를 이용해 세 번째 타임 스텝의 은닉 상태를 계산한다. 당연히 세 번째 스텝의 은닉 상태는 두 번째 은닉 상태와 세 번째 은닉 상태에 대한 정보를 담게 되는데, 두 번째 은닉 상태가 이미 첫 번째 은닉 상태에 대한 정보도 지니고 있기 때문에 결과적으로 세 번째 스텝의 은닉 상태에는 첫 번째와 두 번째 은닉 상태 모두를 반영하게 되는 것이다. 이렇게 계산 과정을 진행하다보면 당연히 끝으로 갈 수록 제일 처음의 은닉상태를 반영하는 정도가 작아질 것이다. 따라서 RNN은 vanishing gradient문제를 겪게 된다.
RNN vs LSTM
RNN LSTM
와 이라는 두 개의 입력이 각각의 가중치에 곱해져 메모리셀의 입력이 됨.
짧은 시퀀스에선 괜찮지만 길수록 성능이 좋지 않음입력 게이트, 망각 게이트, 출력 게이트를 추가함 = 불필요한 기억은 지우고 기억해야할 정보를 지정.
은닉 상태를 계산하는 식이 Vanilla RNN보다 복잡해짐.
셀 상태(cell state) 추가, 이전 타임 스텝의 셀 상태가 다음 시점의 셀 상태를 구하기 위한 입력으로 이용됨
마지막 DML 날이었다. 초반 목표가 머신러닝에 대한 개괄적인 설명이 가능할 정도의 수준이 되는 거였는데 100퍼센트는 아니어도 일부는 달성했다고 생각한다. 그래도 아직 갈 길이 멀지만.. 데이터를 보고 인사이트를 얻는 거나 어떤 알고리즘을 사용했을 때 좋은 결과가 나올지, 하이퍼파라미터를 어떻게 조정하면 좋을지 아직 모르거나 부족한 것 투성이다.
방학 이후부터는 NLP로 세부분야를 결정해 배우기로 한 만큼 RNN에 대한 이해가 필요했는데 오늘 그래도 이전보다 깊게 이해할 수 있었던 것 같다.