세 살 버릇 여든 살까지 간다는 속담이 있습니다. 어제 오늘 자꾸 속담을 언급하는데 어쩔 수 없습니다. 저는 살면서 구축해 온 가치관의 한 켠을 글로 풀어내는 와중 그 주제들이 우연히도 속담과 겹치는 것 뿐입니다. 옛 말 틀린거 하나 없다 하는데, 그와 비슷한 가치관을 지녔다면 저는 바르게 살고 있는 걸까 아니면 그냥 젊은 꼰대인가...반성해 보겠습니다.
인공신경망에서 찾는 습관의 관성
요즘은 새로운 겨울이 다가오니 마니 하지만, 여전히 컴퓨터 과학에서 딥러닝은 핫한 주제입니다. Neural Network의 생김새는 동물의 신경망과 비슷합니다. 물론 구조나 작동하는 방식이 100% 동일하지는 않습니다. 인공 신경망의 원은 동물의 뉴런에 대응합니다. 각각의 원은 활성화되기 위한 일정한 역치 값(weight) 1이 존재합니다.인공신경망의 학습은 각 원(뉴런)에 최적화된 각각의 weight를 찾아내는 과정을 뜻합니다. weight는 적절한 양의 학습에 의해 정해집니다. 너무 적거나 너무 많이 학습을 시키면(Underfitting, Overfitting) 제 기능을 못합니다.
(그래프는 학습 데이터셋과 알고리즘에 따라 천차만별이며, 인간의 학습 메커니즘은 알려지지 않은 부분이 너무 많습니다. 위의 글은 길에서 길쭉한 그림자를 보고 '저것은 장어가 서 있는 것이다.'라고 일컫는 궤변에 가깝습니다. 다만 인공신경망의 학습 메커니즘이 인간의 습관의 관성에 대해 시사하는 바가 커서 굳이 비유를 한 것 뿐입니다. 내용의 신빙성과 정확성에 크게 괘념치 않고 재미로 읽으셨으면 합니다.)
위의 graph는 epoch(학습된 양)에 따른 Accuracy를 나타냅니다. 그래프가 로그함수의 형태를 띄는 것을 확인할 수 있습니다. epoch가 10이 되기 전에 Accuracy가 90%를 넘어선다는 데 주목하세요. 그리고 이후를 확인합시다. 큰 변화가 없습니다. 초기 불과 몇 epoch의 학습으로 만들어낸 Accuracy가 이후 수 십 epoch의 학습으로 끌어 올린 Accuracy보다 훨씬 큰 효과를 가지고 있습니다. 다시 말하자면, 초기에 생성된 weight가 이후 학습에서도 큰 비중을 차지합니다.
생에서 가장 젊은 지금을 누려야 해.
인공 신경망을 간단히 수식화 해 봤습니다. 여기서 x에 무엇을 넣느냐에 따라 Accuracy에 변화가 발생합니다. 그리고 한 덩이의 x값을 넣는 것을 1 epoch라 보고, epoch를 인간의 나이라 보겠습니다. 인간의 뇌가 인공 신경망의 특성에 가깝다는 가정 하에 젊고, 어릴수록 Input이 신경망에 미치는 영향이 어릴 수록 크다고 볼 수 있습니다. 당장 좋은 것만 보고 좋은 생각만 해야 하는 이유가 여기에 있습니다. 시간을 보내고 있는 지금 이 순간이 앞으로의 당신의 삶에서 가장 젊은 시기입니다.
우리가 정말 원치 않는 삶의 모습의 weight를 -1.0으로 잡고, 이상적인 삶의 모습의 weight를 1.0으로 잡겠습니다. weight가 0인 어린 시절에는 어느 방향으로 가든 손쉽게 갈 수 있습니다. 나이가 들면(epoch가 수 차례 진행된 이후) weight가 확립이 될 겁니다. 당연히, 누구나 원치 않는 삶을 살고 싶지는 않을 것입니다.
나이(epoch)가 20, 30이 되어 weight가 확립된 상태에서 weight가 -1.0이라는 것을 깨닫고 1.0으로 바꾸려 한다면 어떻게 될까요? 전체 신경망의 weight값을 바꾸어야 합니다. 어린 시절 weight를 0.0에서 -1.0으로 만들 때 1.0의 양만큼 노력을 가했다면, 어느정도 epoch가 진행된 이후 weight가 -1.0에서 1.0으로 가는데는 단순 계산으로는 2, 그리고 아마 그 이상의 노력이 더 필요할 겁니다.
다른 메커니즘의 두 사물의 유사성을 가지고 속단할 수는 없지만, 분명 이 둘의 유사성이 시사하는 바가 있습니다. 사람은 변할 수 있고 나쁜 버릇도 고칠 수 있습니다. 그런데 쉽지 않습니다. 사람이 변하긴 하는데 사실 잘 안 변합니다. 그렇게 개선을 할 만큼의 의지와 결과를 보여주는 사람은 애초에 -1.0에 해당하는 weight를 갖지 않습니다. 그렇다 해도 weight가 -1.0인 사람의 바뀌고자 하는 의지를 결코 가볍게 봐서는 안됩니다. 늘 예외는 존재하기 때문입니다.
PCB 구조에 관한 간단한 설명
글이 많이 늘었나봅니다. 이런 궤변을 적는게 무척 힘들었는데 어제 오늘은 생각보다 시간이 많이 안 걸렸습니다. 이번 포스팅에서는 간단히 PCB 구조에 대해 소개하고 작업 현황에 대해 간단히 남기고 마치겠습니다. PCB는 단순해보이지만 복잡한 세계입니다. 위의 예제나, 지금 진행중인 프로젝트는 그렇게 복잡하지 않아서 이렇게 2-layer로도 사용이 가능하지만, 조금 더 복잡한 프로젝트에서는 4-6layer까지 사용하기도 합니다. 일단 위에서 각 layer의 역할들을 소개합니다.
Silkscreen | 글자를 새기거나 부품이 배치될 영역을 표시하거나 어떤 부품이 배치되어야 하는지 기판에 인쇄할 내용이 담겨 있습니다.
pastemask | 부품을 납땜할 때 저 작은 구리 판에 납을 일일히 떼어 놓을 수 없습니다. pastemask는 납을 바를 곳만 구멍이 뚫려 있습니다. pcb위에 pastemask만 올려놓고 크림 형태의 납을 펴 바른 후 pastemask를 떼어내면 납땜할 곳에만 납이 발라지도록 합니다.
soldermask | 부품을 납땜하는 곳 이외에는 노출되지 않도록 코팅합니다. 이를 통해 회로를 보호하고, 부품 납땜 시 미리 발라둔 납이 엉뚱한 곳으로 흐르지 않게 합니다.
insulation plane | 상_하단 copper 영역에서 단락이 일어나지 않도록 합니다.
이외에도 드릴링 할 곳을 명시하는 layer나 기타 다른 목적의 작업을 지시하는 layer가 존재합니다.
이 내용에 대한 설명은 이 글을 이해할 수 있을 정도로만 간단하게 설명했습니다. 위의 그림을 통해 직관적으로 받아들일 수 있습니다. (파워포인트로 그림그리는 데 꽤나 많은 시간을 잡아먹었습니다..)
진행상황
ESP32를 후면에 배치하고, 이제 거의 대부분 정리가 되었습니다. 전체적인 그림을 신경쓰면서 부품들을 배치하면 조금 더 효율적으로 진행이 가능할 듯 합니다. Schematic에서는 효율적인 배치라 생각했던 게 PCB Design에 와서는 그리 효율적으로 보이지 않는 경우가 있습니다. Schematic과 PCB Artwork를 넘나들며 부품의 배치를 조금씩 바꾸고, Routing을 수정하는 과정의 연속입니다. 지금은 왼쪽의 U2 부품을 어떻게 중앙에 배치할까의 문제에 봉착했습니다. ESP32와 바로 등을 맞대는 곳에 배치해야 합니다. 그게 가장 좋은 선택지입니다. 그런데 Noise 문제에서 자유로울지는 잘 모르겠습니다. 일단은 저 좁은 틈 사이에 MPU6050을 구겨 넣고 PCB를 주문해 테스트 후 노이즈가 많이 발생하는 것으로 보이면 그 때 위치를 다른 곳으로 옮겨봐야겠습니다.
마치며
늘 강조하는 거지만 첫 술에 배부를 수 없습니다. 어찌 되었든 프로토타입은 열 번이고 더 만들 수 있을만큼 비용이 말도 안되게 저렴하니 일단 기존의 방침대로 계속 진행합니다.
긴 글 읽어주셔서 감사합니다. ❤️와 광고클릭은 고마움을 표현하는 가장 쉬운 방법입니다.
- 역치(threshold) | 뉴런 활성화를 위한 최소 값. [본문으로]