이 텍스트는 샘플 텍스트에요. 수강신청을 하면 원본 텍스트를 볼 수 있어요.
기능주의라는 이론은 우리가 배우는 주제와도 뿌리를 같이합니다. 앨런 튜링은 그의 유명한 연구인 계산 기계와 지능에서 '기계도 생각할 수 있는가?'라는 질문을 던지는데요, 그로부터 10년 후 힐러리 퍼트남이 기계도 생각할 수 있음을 주장하며 제안한 논변이 기능주의의 원형입니다. 특히 기능을 진화의 역사와 결부시켜 설명하는 이론을 목적론적 의미론이라 합니다. 이를 통해 마음과 인간의 정신을 초자연적 존재를 가정하지 않고 설명해낼 수 있기에 자연주의 철학으로 간주하기도 하죠. 물론 완벽한 것은 아닙니다.
Comments
august_gump
1년 전
learning rate 스케줄러를 timm모듈의 CosineLRScheduler를 사용해 코드를 수정해봤는데요, scheduler = CosineLRScheduler( optimizer=optimizer, t_initial=self.hparams.epochs, warmup_t = self.hparams.warmup_epochs, warmup_lr_init=self.hparams.warmup_lr ) return { "optimizer": optimizer, "lr_scheduler": { "scheduler": scheduler, "interval": "epoch", } } def lr_scheduler_step(self, scheduler, optimizer_idx, metric): scheduler.step(epoch=self.current_epoch) 여기서 궁금한 점은 저희 강의에서 사용한 스케줄링 알고리즘은 스텝 단위로 러닝레이트가 업데이트가 되는데, timm모듈의 CosineLRScheduler는 epoch단위로 변경하는게 맞을까요? 아니면 해당 모듈을 step단위로 러닝레이트를 업데이트하도록 할 수 있는걸까요? 그리고 learning rate를 epoch 단위로 업데이트하는 것과 step 단위로 업데이트 하는 것 중에 어떤 것이 더 나은 걸까요? 실험을 했을때, CosineLRScheduler를 사용해 epoch 단위로 업데이트 했을 때는 전체 epoch가 10이라 그런지 처음에 원했던 것처럼 완벽하게 linear하게 warmup이 되고 cosine으로 annealing하지 않았고, 오히려 강의에서 사용한 스케줄러를 사용해 실험한 것보다 학습이 잘 안되더라고요.. 긴 질문 읽어주셔서 감사합니다.
junhsss
1년 전
Scheduler를 언제 어떤 빈도로 호출할지는 Lightning의 책임입니다. 한 step에 한 번 호출할 수도 있고, 한 epoch 에 한 번 호출할 수도 있었죠. 이를 제어하는 설정이 interval입니다. 다시 말해 CosineLRScheduler는 본인을 호출하는 주체가 본인을 언제 어떤 빈도로 호출할지 모른다는 말인데요. 그래서 CosineLRScheduler는 epoch / step중 어떤 단위를 사용하는가?" 라는 질문은 약간 어색한 느낌이 있습니다. epoch 단위로 사용하고 싶다면 작성해주신 코드대로 하시면 되고, step 단위로 사용하고 싶다면 t_initial을 self.trainer.estimated_stepping_batches로, interval을 step으로 설정하여 사용하면 되는 것이죠.
junhsss
1년 전
epoch과 step 중 어떤 단위가 더 나은지는 상황에 따라 다릅니다. 일단 step 단위가 epoch 단위를 포함하는 더 넓은 단위이니 부적절한 비교이기도 하구요. 다만 최근에는 한 데이터셋을 많이 훑으며 학습시키는 경우보다 큰 데이터셋을 적게, 심지어는 한 번 이하로도 훑으며 학습시키는 경우가 일반적인데요. 그래서 epoch보다는 step 단위를 선택하는게 자연스럽다고 생각하시면 됩니다. 겪으신 문제처럼 데이터셋을 열 번 밖에 훑지 않는다면 epoch 단위의 schedule을 따지는게 어색하게 되어버리죠. epoch은 그저 데이터셋의 속성일 따름이니 학습 과정이 그에 종속되는게 건전하지는 않습니다.