inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

system.out.println 에러

미해결

실전 JSP (renew ver.) - 신입 프로그래머를 위한 강좌

강의 중 나오는 선언 태그 내 system.out.println~ 구문에서 에러가 발생합니다. page 지시어로 java.lang.* 을 추가했는데도 실행이 안되네요 ㅠㅠ 왜 이럴까요.. Type Exception Report Message JSP를 위한 클래스를 컴파일할 수 없습니다.: Description The server encountered an unexpected condition that prevented it from fulfilling the request. Exception org.apache.jasper.JasperException: JSP를 위한 클래스를 컴파일할 수 없습니다.: JSP 파일 [/jspEx.jsp]의 [22] 행에서 오류가 발생했습니다. System.out cannot be resolved to a type 19: ArrayList<String> list = new ArrayList<String>(); 20: 21: public void jspMethod() { 22: System.out.println("-- jspMethod() --"); 23: } 24: %> 25:

  • java
  • jsp
cobogsil 댓글 2 좋아요 0 조회수 2406

제가 맞게 이해한건지 잘 모르겠습니다.

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Q1. IDENTITY 전략에서만 예외적으로, persist() 호출 직후 바로 insert 쿼리가 전달되어, DB에 데이터가 저장된다고 설명해주셨는데요, 이때 DB에 저장한 직후 동시에 그 DB에 넣은 Entity를 영속성 컨텍스트의 1차 캐시에도 넣고, insert 시DB에 생성된 PK를 가져와서 영속성 컨텍스트 안에 해당 Entity를 관리하는데 사용하는게 맞을 까요 ? Q2. ppt 32p 를 보면 allocaitonSize 속성 부분에서 "데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 1로 설정해야 한다" 라고 나와있는데요, 수업 내용과 같이 이 allocationSize 값 만큼 한번에 DB에 id를 할당하기 때문에 , DB에 할당되어야 할 id값을 1나씩 증가하도록 설정해야 하는 상황이라면, 이 값을 1로 설정해야 한다 라고 이해하였습니다. 그런데 ppt에 나온것과 같이 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정해야 하는 특별한 상황이 따로 있는지 궁금합니다.

  • JPA
  • java
kkt169 댓글 1 좋아요 0 조회수 300

실무에서도 계층형 빌더가 자주 쓰이나요?

미해결

이펙티브 자바 완벽 공략 1부

뭔가 보면서도 '저렇게 까지 빌더를 써야하나?' 라는 생각이 들어서 궁금해서 여쭤봅니다. 실무에서 계층형 빌더가 자주 쓰이나요??

  • 이펙티브자바
  • java
  • 빌더
dataworld 댓글 1 좋아요 3 조회수 547

생성자가 이해가 안가요..

미해결

Do it! 자바 프로그래밍 입문 with 은종쌤

public Student() { korea = new Subject(); math = new Subject(); } 이게 어떤..역할인건지.. 왜 빈 괄호를 붙이는지 이해가 안가요 ㅠ

  • java
밍밍이 댓글 2 좋아요 0 조회수 316

(응용) 프로젝트 진행 전 상수-Constants 구성 에 관한 질문입니다.

해결됨

스프링과 JPA 기반 웹 애플리케이션 개발

자주 쓰이고, 오타가 날법한 String 을 모아 아래 처럼 상수화 했습니다. 상수패키지 com.studyolle.core.constant.* 이후 Controller , Test 등에서 아래와 같이 사용중입니다. 질문입니다 Enum 으로 관리 하려고 했지만, 컨트롤러-핸들러 의 @GetMapping( Enum.URI.name() ) 과같은 선언도 불가능 하고, 단순 값 참조를 Enum .name() 이라던지, Enum .custom() 과 같이 덕지덕지 메서드가 붙게되어, 심플하게 하고자, Enum 은 사용하지 않았습니다. 그러나 이렇게 static final 필드 로 관리하다보면, 언젠가 양이 많아 질탠데, 이럴 경우는 또다시 나누어야 될거라 생각이 듭니다만.. 이런 일반적인 방식 보다 효과적으로 관리하는 ( Map 을 쓴다던지, 특정 패턴이라던지) 방법이 있을까요? 상수 관리는 이런 방향이 괜찮았다.. 라는 사례가 궁금합니다. 읽어주셔서 감사합니다.

  • JPA
  • spring
  • spring-boot
  • java
  • thymeleaf
Truestar 댓글 1 좋아요 0 조회수 743

플러시에 대한 정리

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요. 맨 마지막에 플러시 정리해주실 때 설명이 헷갈려서 질문드립니다. 플러시는 트랜잭션 단위로 동작하기 때문에 '커밋 직전'에만 변경 내역을 DB에 날려주면 된다고 하셨는데요, 앞서 배운 그림 자료는 commit() 호출 -> flush() 호출 -> 쿼리가 날아감 인 것 같은데 커밋 직전에 변경 내역을 날린다는 게 무슨 의미인지 궁금합니다.

  • java
  • JPA
도던 댓글 2 좋아요 1 조회수 436

주문 목록 검색 컨트롤러에서 @ModelAttribute가 적용된 orderSearch 질문

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요! 주문 목록 검색 요청을 처리하는 OrderController의 orderList() 메서드 관련 질문이 있습니다. 제가 findOrders()내부 findAllByString() 로직을 이해한게 아니여서, orderList()메소드가 이런식으로 동작하는게 맞는지 궁금합니다. 이 메소드는 다음의 3가지 상황에 의해 호출 될 것 같은데요, 1. 상품 주문 화면에서 상품 주문 후, 주문을 처리하는 order() 메소드에 의한 리다이렉션 요청을 받을 때 2. 홈 화면에서 순수하게 주문 내역을 클릭하였을 때 3. 주문 내역 화면에서, 회원명 or 주문상태를 조건으로 하여 검색할 때 그래서 상황 1,2와 같은 경우에는 모든 주문 내역을 다 보여주고, 상황 3의 경우에는 조건에 따른 주문내역만을 보여주도록 동작해야 할 것 같습니다. 이때 실제 코드에서는 OrderService의 findOrders() 메소드 호출만으로 위 3가지 상황을 모두 커버하고 있는데요, 그렇게 되면 () 상황 1,2의 경우에는 orderList()의 @ModelAttribute orderSearch에 null이 대입되어 모든 주문 내역이 다 조회되는 것 같습니다. 그리고 상황 3의 경우에는 선택한 조건에 따른 orderSearch 객체가 form태그에 의해 요청파라미터로 념겨져와서, orderList()의 파라미터 중 orderSearch가 받아 조건에 따른 주문 내역이 조회되는 것 같은데, 제가 맞게 이해한건지 궁금합니다. 그리고 특히 상황 3의 경우 선택한 회원명or주문상태에 따른 orderSearch객체를, form태그가 생성하여 보내주는 것이 맞는지 궁금합니다. 긴 질문 읽어주셔서 감사합니다!

  • spring-boot
  • java
  • 웹앱
  • JPA
  • spring
kkt169 댓글 1 좋아요 0 조회수 392

entity에 비지니스 로직 관련 질문입니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요 강사님! 이번 강의에서 addStock함수와 removeStock 함수를 entity에 작성하셨는데요. 응집력 측면에서 해당하는 entity에 함수에 관련된 로직들을 넣는 건 이해했습니다. 여기서 궁금한건 테스트 코드인데요 저렇게 entity에 로직이 들어가면 해당 로직도 테스트 코드를 작성해야 할거 같거든요. 일반적으로 서비스에 비지니스 로직을 넣고 여러 함수들이 생기면 테스트클래스를 작성해서(ex. SampleService -> SampleServiceTest) 각 함수들을 테스트하는 테스트 코드를 짜는데요. 단위테스트를 할 때 외부 디펜던시(ex. db 등)를 끊고 해당 기능만 테스트 하는게 좋다고 배웠습니다. 그럼 Service에 있는 함수는 함수대로 테스트하고, 엔티티에 있는 함수들은 그거대로 또 따로 테스트를 작성해야 할 거 같은데 현업에서는 엔티티도 테스트를 작성하는 건가요? 아래처럼요 public class ItemTest { @Test public void removeStockTest() { //given //when itemEntity.removeStockTest() //then } }

  • 웹앱
  • spring
  • spring-boot
  • JPA
  • java
서꾸리 댓글 1 좋아요 0 조회수 742

Filter의 처리 순서에 관한 질문

미해결

스프링 시큐리티

안녕하세요. 학습내용을 복습하던중 질문이 있습니다. <p>DelegatingFilterProxy</p> 와 <p>FilterChainProxy</p> 의 요청 처리 흐름을 <p>DispatcherServlet</p>을 포함하여 설명하는 그림에서 질문이 있습니다. <p>FilterChainProxy</p>가 직접 <p>DispatcherServlet</p>에 요청을 하는 것이 맞나요? 제 생각에는 첨부한 그림과 같은 실행 순서가 되야 할 것 같습니다. <p>FilterChainProxy</p>가 인증 인가 처리를 마친 후 직접 <p>DispatcherServlet</p>에 요청을 날리게 되면 <p>Servlet Container</p>의 필터 Filter 체인 실행에 문제가 있을 것 같습니다.

  • Spring Security
  • spring-boot
  • java
득윤 댓글 1 좋아요 2 조회수 543

int j = 0

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

안녕하세요. 강의를 듣던 중 궁금한 점이 생겨 질문을 남깁니다. int j =0 을 for문 조건에 초기화 하지 않고 for문 밖에 초기화를 하면 안쪽 for문이 끝나고 다시 바깥쪽 for문을 돌 때에 마지막 j의 값이 그대로 넘어가게 되는 것 맞나요?

  • java
  • 코테 준비 같이 해요!
김동현 댓글 1 좋아요 0 조회수 517

yml과 properties

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

어떤 파일이 더 좋다? 유용한가요? 본인에게 더 맞는걸 쓰는게 괜찮은가요? 전 yml이 편한데 구글링 하면서 찾아보면 yml보다 프로퍼티스가 더 많이 보이는거 같아서요..

  • spring
  • spring-boot
  • JPA
  • java
  • 웹앱
박찬영 댓글 1 좋아요 0 조회수 328

Optional 적용 문제

해결됨

실전! 스프링 데이터 JPA

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 회원 이메일을 사용하여 MemberRepository에서 회원 정보를 조회하는 메서드를 구현해 보았습니다. 해당 이메일의 회원이 DB에 존재하지 않을경우를 고려하여 다음과 같이 Optional로 감싸주었습니다. Transactional(readOnly = true) public interface MemberRepository extends JpaRepository<Member, Long> { Optional<Member> findByEmail(String email); ... } 이 경우 Service 단에서 해당 메서드를 사용할 경우 변수 타입을 Optional<Member>로 선언해 줘야 했습니다. @Transactional public void followFriend(FollowFriendRequest request) { Member requester = getMember(request.getRequesterEmail()); Optional<Member> receiver = memberRepository.findByEmail(request.getReceiverEmail()); log.info("requester: '{}', receiver: '{}'", requester, receiver); if (receiver == null) { throw new MemberEmailNotFound(); } if (requester.hasFriend(receiver) || relationRepository.existsByOwnerEmailAndFriendEmail(request.getRequesterEmail(), request.getReceiverEmail())) { throw new EmailDuplicatedException(request.getReceiverEmail()); } relationRepository.save(new Relation(requester, receiver)); } 이러면 위 코드 마지막 줄의 Relation 생성자 또한 Optional을 포함한 생성자를 추가로 만들어 줘야 하고 이렇게 되면 Relation 엔티티의 receiver 필드값에도 Optional을 씌워줘야 하는 문제가 발생했습니다. 이 경우 Optional을 어떻게 사용하는게 옳은건지 궁금합니다.

  • optional
  • spring
  • spring-boot
  • java
  • JPA
고산하 댓글 2 좋아요 1 조회수 1414

클래스의 로드 시점

미해결

코딩으로 학습하는 GoF의 디자인 패턴

안녕하세요! 강의 너무나 잘 듣고 있습니다. public class Settings { private Settings() { } private static class SettingsHolder { private static final Settings INSTANCE = new Settings(); } public static Settings getInstance() { return SettingsHolder.INSTANCE; } } 로드 시점에 관한 질문입니다. getInstance가 호출 될때 SettingsHolder가 JVM에 로드된다고 말씀하셨습니다. 자바는 잘 모르지만, 동적으로 로드가 된다고 해석했습니다. public class Settings { private static final Settings INSTANCE = new Settings(); private Settings() { } public static Settings getInstance() { return INSTANCE; } } 그렇다면 이른 초기화 방식도, 마치 SettingsHolder가 그러하듯, 필요로 할 때 동적으로 로드 될 순 없나요? 필요로 할 때 로드된다면 SettingsHolder를 필요로 하지 않을 테니 말이죠. 그럼에도 불구하고 static inner class를 사용하는 건 반드시 이유가 있을 테니.. 하여 제 나름대로 찾아보고 테스트해 본 결과 자바 파일에 정의된 기본 클래스들은 실행 시 로드됨을 확인했습니다. 모든 클래스가 실행 시 로드되는진 확실하진 않지만 이와 관련된 JVM의 로드 정책에 대해서 간략하게 설명 부탁드립니다. :)

  • java
  • 디자인-패턴
댓글 3 좋아요 2 조회수 943

Internal Covariate Shift 관련 질문 드립니다.

미해결

딥러닝 CNN 완벽 가이드 - TFKeras 버전

선생님 안녕하세요, 공부를 하던 중 Internal Covariate Shift가 정확히 왜 개선 되어야 하는 문제인지 잘 모르겠어서 이렇게 질문을 남깁니다. 우선 제가 이해한 바로는 Covariate Shift란, 실제 데이터가 True function이라는 분포를 따른다고 할 때 아래와 같은 경우에서 발생한다고 이해했습니다. 우리가 train data를 샘플링 할 때 true function의 큰 틀은 따르지만 조금 다른 분포에서 샘플링을 하고 이를 사용해서 모델을 훈련시킬 경우, 학습 모델은 True function과 전적으로 겹칠 수 없게 됩니다. 따라서 test data를 train data가 커버하고 있지 않는 true function 영역에서 추출하게 된다면 학습시킨 모델은 잘 맞지 않게 될 것이고, 이는 학습용 데이터와 테스트 데이터의 분포가 서로 달랐기 때문에 발생한 문제라고 이해했습니다. Internal Covariate Shift란, 위와 같은 문제가 어떤 레이어의 출력이 다음 레이어의 입력으로 들어갈 때 일어나는걸로 이해했습니다. 딥러닝 특성상 한 레이어당 많은 파라미터가 존재하고 비선형적인 활성화 함수를 사용하기 때문에 A 레이어에 입력이 Z-mean scaling된 데이터가 들어온다고 해도, weighted sum과 활성화 함수를 거쳐서 B 레이어의 입력으로 들어가는 값들은 A 레이어의 정규화된 입력 분포와는 다른 분포를 가지고 있게 될 것입니다. 제가 생각하는 Internal Covariate Shift의 단점은 훈련 속도가 느려진다는 부분입니다. B 레이어의 입장에서는 A 레이어의 가중치 값이 바뀔 때마다 들어오는 입력의 분포가 달라지기 때문에 지속적으로 적응(마땅한 표현이 떠오르지 않네요 ㅠ) 해나가야 해서 결국 최적해를 찾기까지는 오랜 시간이 걸릴 것 같습니다. 이러한 문제는 네트워크가 깊어질수록 입력층에 가까운 레이어와 출력층의 가까운 레이어가 받아보는 분포의 차이는 더 크게 될 것이고, 때문에 입력층에 가까운 레이어의 가중치에서 미세한 조정이 발생해도 출력층에 가까운 레이어의 가중치에서는 상당한 임팩트의 영향력을 끼칠 수 있다고 생각이 되어 네트워크가 안정적으로 수렴하기에 어렵다고 생각됩니다. Training 과정에서는 위와 같은 부분이 문제라고 생각되는데 혹시 제가 잘못 이해한 부분이 있다면 지적 부탁드리겠습니다 선생님. 그리고 문서들을 쭉 찾아보니까 test시에도 training 과정에서 사용했던 분포와 test 할 때 사용하는 이미지 데이터의 분포가 다르기 때문에 성능 차이가 발생한다고 하는데 이 부분이 잘 이해가 안갑니다. 어차피 테스트 할 경우에는 training 할 경우와 세부적으론 다르지만 큰 틀에서는 비슷한 분포의 데이터를 사용하는데, 이러한 gap을 줄여주기 위해 training을 돌리는게 아닌가요? 항상 감사드립니다 선생님. 이와 겹치는 부분이 있지만 결국에는 다른

  • 딥러닝
  • kaggle
  • keras
  • 머신러닝 배워볼래요?
  • tensorflow
  • cnn
vecum0814 댓글 1 좋아요 0 조회수 1623

h2 설치 관련

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 현재 군인 신분으로 사지방 특성상 차단되어 있는 기능이 좀 있는데 h2.bat이나 윈도우창의 h2 콘솔 모두 켜지지 않는데 이러면 방법이 없는건가요?

  • h2
  • spring
  • JPA
  • java
  • spring-boot
  • 웹앱
민준 댓글 1 좋아요 1 조회수 613

persist이후에 commit은 안하나요?

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

쭉 강의를 따라오다보니 의문점이 하나 있는데 강의에서 em.persist() 이후에 tx.commit() 같은 코드가 없는데 어떻게 DB에 저장이 되는건가요? 김영한님의 다른 jpa강의를 보앗을 때 commit이 필요하다고 본거같아서요!

  • JPA
  • java
  • spring
  • 웹앱
  • spring-boot
IJILKJ 댓글 1 좋아요 1 조회수 288

일대다 페치 조인과 페이징에 대해

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

안녕하세요! 일대다 패치조인을 진행하게 될시에, 다쪽의 갯수에 맞추어서 데이터가 뻥튀기, 즉 일쪽이 뻥튀기 된다는 사실을 인지하고 있습니다. 위 코드의 진행과정을 알고싶은데요, 위 처럼 일대다 페치 조인으로 데이터가 뻥튀긴 테이블이 완성되고 -> 뻥튀기 된 데이터들이 애플리케이션(메모리)에 올라가고 -> 거기에서 jpa가 이제 List<Order>에 담는것이 맞을까요? 이게 만약 맞다면, 일대다 패치조인시 페이징할때의 위험성과 같이 저것도 다 메모리에 올라가는 상황이 아닌가요?!, 아니면 제가 메모리의 개념을 잘 이해 못하고 있는지.. 답답하네요 ㅠ

  • spring
  • JPA
  • spring-boot
  • java
gmlakd0930 댓글 1 좋아요 0 조회수 488

해당 영상에서 member엔티티의 id값 할당방식

미해결

실전! 스프링 데이터 JPA

@Id @GeneratedValue Member 엔티티의 id생성이 auto로 디폴트값인데, 영상 7분 10초에 멤버의 객체생성이 하나뿐인 테스트에서 id값이 1이아닌 2로 뜨는지 궁금합니다.

  • java
  • JPA
  • spring-boot
  • spring
댓글 1 좋아요 0 조회수 225

활성화 함수에 대한 전반적인 질문 드립니다.

미해결

딥러닝 CNN 완벽 가이드 - TFKeras 버전

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 권철민 선생님 안녕하세요, 딥러닝 cnn 완벽 기초 강의를 모두 수강 하고 복습을 하던 중에, 활성화 함수의 전반적인 개념, 특히 ReLu 함수에 대해 질문이 있습니다. 우선 활성화 함수가 필요한 이유는 모델의 복잡도를 올리기 위해서라고 이해했습니다. 단순 퍼셉트론에서 XOR 문제를 해결할 수 없었던 문제를 해결하기 위해 MLP가 등장했고, 여기에서 step function이 활성화 함수로 사용되어 이전 층의 결과값을 함수에 집어 넣어 다음 층으로 전달하는 역할을 맡게 되었습니다. 하지만 MLP를 넘어 더 많은 히든 레이어를 쌓아 올리는 DNN의 경우, 선형 함수의 특성상 이를 여러번 겹쳐서 쌓아 올려도 결국에는 하나의 선형 함수로 표현할 수 있기 때문에 복잡도를 올리기 위해 레이어를 더 쌓는 의미가 없다고 이해했습니다.(물론 이렇게 쌓을 경우 레이어마다 가중치가 생기기 때문에 아예 의미가 없다고는 할 수 없겠으나, 모델 자체의 복잡도를 올리기 위한 목적에는 부합하지 않는다고 생각하고 있습니다). 단순한 퍼셉트론을 넘어 다층 퍼셉트론에서는 기존의 단층 퍼셉트론만을 활용했을 때는 풀 수 없었던 복잡도의 문제 해결이 가능해졌지만, 동일한 방법으로는 아무리 레이어를 쌓아도 더욱 복잡한 문제는 풀 수 없었습니다. 때문에, 더욱 복잡한 문제를 풀기 위해서 모델의 복잡도를 올리기 위해서는 선형 활성화 함수를 여러개 사용하여 쌓아도 결국 하나의 레이어를 사용하여 나타낼 수 있는 상황을 막아야 하기 때문에 이와 반대로 비선형 활성화 함수를 사용한다고 이해하고 있습니다. 비선형 활성화 함수들의 예시로 시그모이드, 하이퍼볼릭 탄젠트와 같이 shape 자체가 비선형인 함수들이 각광받았는데, 작은 미분값으로 인해 깊은 네트워크로 갈수록 역전파 과정에서 발생하는 Gradient Vanishing 문제, 그리고 양극단으로 값이 모일수록 명확성이 떨어진다는 단점때문에 히든 레이어의 활성화 함수로는 더는 차용되지 않는다고 이해하고 있습니다. 이러한 기울기 소실 문제를 해결하기 위해 대부분의 은닉층에서는 활성화 함수로 ReLu함수를 사용한다고 이해하고 있는데요, 렐루 함수일 경우 ReLu(-1) + ReLu(1) != ReLu(-1 + 1)이기 때문에 비선형 함수이지만, (음의 무한대, 0] 그리고 [0, 양의 무한대) 구간에서는 선형이라고 알고 있습니다. 이를 고려한다면 ReLu 함수는 비록 전체 구간에서는 비선형 함수이지만, 대부분의 구간에서는 선형 함수인데 이러한 부분을 고려할 때 어떻게 ReLu 함수를 사용할 때 저희가 시그모이드와 같은 함수에서 기대하는 것과 같은 비선형적인 특성으로 모델의 복잡도를 올려줄 수 있는것인지 직관적으로 잘 와닿지가 않습니다. 또한, CNN 연산 적용 후 ReLu 함수를 적용하는 부분이 궁금합니다. 이미지의 특정 영역에 filter값을 곱해서 특정을 추출하는 feature extracting 과정에서 합성곱 연산의 값이 크게 나올수록 이미지의 해당 영역이 해당 필터가 추출하고자 하는 값(가로, 세로, 커브 모양 등등)을 강하게 나타내고 있다고 이해하였는데요, 그렇다면 이렇게 추출되서 생성된 새로운 feature map에 ReLu 함수를 적용하는 이유는 모델의 복잡도를 올리기 위해 비선형적인 함수를 추가하는것 뿐만 아니라 예를 들어서 가로 선을 추출하기 위한 필터를 통과했을 경우, 값이 커서 가로에 해당할 확률이 높은 부분은 그대로 유지하되, 음수로 결과가 나와 가로의 특성과는 전혀 맞지 않는 특성을 모두 0으로 만들어서 가로 특징이 없다고 정리하는 역할 또한 존재할까요? 혹시 제가 놓친 ReLu 함수를 CNN의 활성화 함수로 쓰는 이유가 있다면 지적 부탁드립니다. 이미지의 픽셀은 0~255의 값으로 구성된다고 알고 있는데 음수일 경우도 존재할까요? 만약 합성곱 연산의 결과로 음수값이 나왔다면 어떻게 해석하는지 궁금하고 또 이럴 경우 filter의 weight가 음수로 크게 설정되어 있어서 발생하는 경우인지도 궁금합니다. 그리고 CNN 모델의 진행 과정에서, 입력층과 가까운 Conv layer일수록 이미지의 edge, textile같은 low level 특징을 추출하는 것에서 출력층과 가까울수록 더욱 더 추출된 특징들을 일반화 시킨다고 이해했는데 제가 맞게 이해했을까요? 마지막으로 그렇다면 이때 각 filter마다 이미지 안에 가로, 세로, 혹은 다양한 모양들의 곡선적인 특징들이 존재하는지에 대해 추출하는 역할을 담당하게 될것이라고 예상되는데, 이렇게 필터마다 작업이 할당되는 자세한 로직이 알고싶다면 어떤 분야에 대해 더 공부해보아야 할지 추천 부탁드리겠습니다. 현재 머리속에서 너무 많은 부분들이 정리가 안되어서 글이 장황해진점 너무 죄송합니다. 혹시 제가 어떤 의도로 질문을 드린건지 잘 파악이 안되시는 부분이 있다면 풀어서 써보겠습니다. 항상 감사합니다 선생님!

  • relu
  • cnn
  • 머신러닝 배워볼래요?
  • 딥러닝
  • tensorflow
  • keras
  • kaggle
vecum0814 댓글 2 좋아요 1 조회수 750

인기 태그

인프런 TOP Writers

주간 인기글