본문 바로가기
DataScience/DeepLearning

깊은 복사, 얕은 복사 (밑바닥부터 구현하는 딥러닝2)

by mkk4726 2023. 7. 18.

그림1. CBOW 모델의 init func
그림2. CBOW 모델의 layer 중 하나인 MatMul layer의 backward func

하나의 모델에는 여러 개의 layer들이 있고 backward를 진행하며 grads를 구합니다.

layer들의 grads를 self.grads에 list로 관리를 하는데, 이런 구조에서는 반드시 깊은 복사를 해줘야합니다.

self.grads[0][...] = dW

그 이유에 대해 정리해봅니다.

 


먼저 깊은 복사란 새로운 메모리를 할당받는 것을 말합니다.

그림3. 깊은 복사와 얕은 복사의 차이

보통의 상황에서는 큰 차이가 없지만 리스트와 같은 자료형을 통해 관리할 때는 중요한 차이를 보입니다.

그림4. 얕은 복사

그림 4와 같이 얕은 복사를 할 경우에는 a에 새로운 값을 할당했지만 그 값이 적용되지 않습니다.

이를 쉽게 설명하자면, 같은 이름의 a 지만 얕은 복사를 했기 때문에 새로운 a를 만든 것입니다.

그림5. 깊은 복사

반면에 그림5와 같이 깊은 복사를 할 경우 그 값이 반영되었음을 확인할 수 있습니다.

 

이 2개의 차이를 그림으로 표현하면 다음과 같습니다.

그림6. 깊은복사와 얕은 복사 차이 설명

즉 c는 a와 b의 주소를 가지고 있고 이를 통해 접근합니다.

 

얕은 복사를 하면 a의 주소가 바뀌게 되고 c가 가지고 있는 a의 주소와 새로 바뀐 a의 주소는 다릅니다.

따라서 c는 기존 값을 계속 가지고 있습니다.

 

깊은 복사를 하면 a의 주소는 그대로이고 값만 새로 할당되기에 새로 바뀐 값을 가지고 있습니다.


- reference

밑바닥부터구현하는딥러닝2

 

댓글