> 기술 주변기기 > 일체 포함 > 신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

王林
풀어 주다: 2023-04-12 19:58:04
앞으로
1085명이 탐색했습니다.

지금까지 신경망에 대한 큰 고민 중 하나는 설명하기 어려운 블랙박스라는 점이었습니다. 이 기사에서는 신경망이 패턴 인식 및 분류에 왜 그렇게 효과적인지 주로 이론적으로 이해합니다. 그 본질은 다양한 범주로 쉽게 구별될 수 있을 때까지 아핀 변환 및 비선형 변환의 레이어를 통해 원래 입력을 왜곡하고 변형하는 것입니다. 실제로 역전파 알고리즘(BP)은 훈련 데이터를 기반으로 왜곡 효과를 지속적으로 미세 조정합니다.

약 10년 전부터 심층 신경망은 컴퓨터 비전과 같은 분야에서 획기적인 성과를 거두며 큰 관심과 관심을 불러일으켰습니다.

그러나 일부 사람들은 여전히 ​​이를 걱정하고 있습니다. 그 이유 중 하나는 신경망이 블랙박스이기 때문입니다. 신경망을 잘 훈련시키면 고품질의 결과를 얻을 수 있지만 어떻게 작동하는지 이해하기 어렵습니다. 신경망이 오작동하면 문제를 정확히 찾아내기 어려울 수 있습니다.

심층 신경망을 전체적으로 이해하기는 어렵지만 저차원 심층 신경망, 즉 각 계층에 몇 개의 뉴런만 있는 네트워크로 시작하면 훨씬 이해하기 쉽습니다. 시각화 방법을 통해 저차원 심층 신경망의 동작과 훈련을 이해할 수 있습니다. 시각화 방법을 사용하면 신경망의 동작을 보다 직관적으로 이해하고 신경망과 토폴로지 간의 연결을 관찰할 수 있습니다.

다음에는 특정 데이터 세트를 분류할 수 있는 신경망의 복잡성에 대한 하한을 포함하여 흥미로운 내용을 많이 이야기하겠습니다.

1. 간단한 예

아주 간단한 데이터 세트부터 시작하겠습니다. 아래 그림에서 평면 위의 두 곡선은 수많은 점으로 구성되어 있습니다. 신경망은 이 점이 어느 선에 속하는지 구별하려고 시도합니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

신경망(또는 분류 알고리즘)의 동작을 관찰하는 가장 직접적인 방법은 신경망이 각 데이터 포인트를 어떻게 분류하는지 확인하는 것입니다.

입력 레이어와 출력 레이어가 하나만 있는 가장 간단한 신경망부터 시작합니다. 이러한 신경망은 단순히 두 가지 유형의 데이터 포인트를 직선으로 분리합니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

이러한 신경망은 너무 단순하고 투박합니다. 현대 신경망은 종종 입력 레이어와 출력 레이어 사이에 숨겨진 레이어라고 불리는 여러 레이어를 갖습니다. 가장 단순한 현대 신경망에도 하나 이상의 숨겨진 레이어가 있습니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

간단한 신경망, 이미지 출처 Wikipedia

마찬가지로, 신경망이 각 데이터 포인트에 대해 수행하는 작업을 관찰합니다. 보시다시피, 이 신경망은 데이터 포인트를 분리하기 위해 직선 대신 곡선을 사용합니다. 분명히 곡선은 직선보다 더 복잡합니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

신경망의 각 계층은 새로운 표현을 사용하여 데이터를 나타냅니다. 데이터가 어떻게 새로운 표현으로 변환되는지, 그리고 신경망이 이를 어떻게 분류하는지 관찰할 수 있습니다. 표현의 마지막 계층에서 신경망은 두 가지 유형의 데이터 사이에 선(또는 더 높은 차원에 있는 경우 초평면)을 그립니다.

이전 시각화에서는 데이터의 원래 표현을 보았습니다. "입력 레이어"에서 데이터가 어떻게 보이는지 생각하면 됩니다. 이제 데이터가 변환된 후 어떻게 보이는지 살펴보겠습니다. 이를 "숨겨진 레이어"에서 데이터가 어떻게 보이는지 생각해 보세요.

데이터의 각 차원은 신경망 계층의 뉴런 활성화에 해당합니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

히든 레이어는 위의 방법으로 데이터를 표현하므로 데이터를 직선으로 분리할 수 있습니다(즉, 선형 분리 가능)

2. 레이어의 연속 시각화

에 있는 방법에서 이전 섹션에서 신경망의 각 계층은 데이터를 서로 다른 표현으로 표현합니다. 이러한 방식으로 각 레이어의 표현은 연속적이지 않고 불연속적입니다.

이로 인해 한 표현을 다른 표현으로 변환하는 방법이 어려워집니다. 다행스럽게도 신경망 계층의 특성을 이용하면 이러한 측면을 매우 쉽게 이해할 수 있습니다.

신경망에는 다양한 계층이 있습니다. 아래에서는 tanh 레이어를 구체적인 예로 설명하겠습니다. 다음을 포함하는 tanh 레이어

  • 선형 변환에 "가중치" 행렬 W 사용
  • 번역에 벡터 b 사용
  • tanh를 사용하여 점별로 표현

다음과 같이 연속 변환으로 생각할 수 있습니다. :

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

다른 표준 레이어도 거의 동일하며 아핀 변환과 단조 활성화 함수의 포인트별 적용으로 구성됩니다.

이 방법을 사용하면 더 복잡한 신경망을 이해할 수 있습니다. 예를 들어, 아래 신경망은 4개의 숨겨진 레이어를 사용하여 약간 얽힌 두 개의 나선을 분류합니다. 데이터를 분류하기 위해 데이터의 표현이 지속적으로 변형되는 것을 볼 수 있습니다. 두 나선은 처음에는 얽혀 있지만 결국에는 직선(선형 분리 가능)으로 분리될 수 있습니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

한편, 아래의 신경망도 여러 개의 히든 레이어를 사용하지만, 더 깊게 얽혀 있는 두 개의 나선을 분할할 수는 없습니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

현재는 저차원 신경망만 사용하고 있기 때문에 위의 두 나선형 분류 작업에는 몇 가지 어려움이 있다는 점을 분명히 지적해야 합니다. 더 넓은 신경망을 사용하면 모든 것이 훨씬 쉬워질 것입니다.

(Andrej Karpathy는 ConvnetJS를 기반으로 좋은 데모를 만들었는데, 이를 통해 사람들은 이러한 종류의 시각적 훈련을 통해 신경망을 대화식으로 탐색할 수 있습니다.)

3. tanh 계층의 토폴로지

신경망의 각 계층은 늘어납니다. 공간을 압축하지만 자르거나 쪼개지거나 접히지는 않습니다. 직관적으로 신경망은 데이터의 위상적 속성을 파괴하지 않습니다. 예를 들어, 데이터 세트가 연속적이면 변환된 표현도 연속적입니다(그 반대도 마찬가지).

위상적 특성에 영향을 주지 않는 이와 같은 변환을 동형변환이라고 합니다. 공식적으로는 양방향 연속 함수의 전단사입니다.

정리: 가중치 행렬 W가 비특이이고 신경망의 레이어에 N개의 입력과 N개의 출력이 있는 경우 이 레이어의 매핑은 동형(특정 도메인 및 값 범위에 대해) 워드)입니다.

증명: 단계별로 살펴보겠습니다.

1. W의 행렬식은 0이 아니라고 가정합니다. 그러면 이는 선형 역함수를 갖는 쌍선형 선형 함수입니다. 선형 함수는 연속적입니다. 그런 다음 "W 곱하기"와 같은 변환은 동형입니다.

3. tanh(시그모이드 및 소프트플러스도 있지만 ReLU는 포함되지 않음)는 연속형입니다. 기능. (특정 도메인 및 범위에 대해) 전단사이며 점별 적용은 동형입니다.

따라서 W의 0이 아닌 행렬식이 있는 경우 이 신경망 계층은 동형입니다.

그러한 레이어를 무작위로 결합해도 이 결과는 여전히 유지됩니다.

4. 토폴로지 및 분류

두 가지 유형의 데이터 A와 B가 포함된 2차원 데이터 세트를 살펴보겠습니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림A는 빨간색, B는 파란색

설명: 이해하기 데이터 세트를 분류하려면 신경망(깊이에 관계없이)에 3개 이상의 히든 유닛을 포함하는 레이어가 있어야 합니다.

앞서 언급했듯이 분류를 위해 시그모이드 단위나 소프트맥스 레이어를 사용하는 것은 A와 B를 분리하기 위해 마지막 레이어 표현에서 초평면(이 경우 직선)을 찾는 것과 같습니다. 은닉 유닛이 2개뿐인 신경망은 이러한 방식으로 데이터를 위상적으로 분리할 수 없으므로 위 데이터 세트를 분류할 수 없습니다.

아래 시각화에서 히든 레이어는 직선을 구분선으로 사용하여 데이터 표현을 변환합니다. 구분선이 계속해서 회전하고 이동하는 것을 볼 수 있지만, 결코 두 종류의 데이터 A와 B를 잘 분리할 수 없습니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림신경망이 아무리 잘 훈련되어도 분류 작업을 제대로 완료할 수 없습니다.

결국 로컬 최소값을 간신히 달성하고 분류 정확도 80%를 달성하는 데 그칩니다.

위 예시에는 히든 레이어가 1개뿐이고, 히든 유닛이 2개뿐이므로 어차피 분류에 실패합니다.

증명: 은닉 유닛이 두 개만 있는 경우 이 레이어의 변환은 동형이거나 레이어의 가중치 행렬의 행렬식이 0입니다. 동형이라면 A는 여전히 B에 둘러싸여 있고 A와 B는 직선으로 분리될 수 없습니다. 행렬식이 0인 경우 데이터 세트는 일부 축에서 축소됩니다. A는 B로 둘러싸여 있기 때문에 임의의 축에서 A를 접으면 일부 A 데이터 포인트가 B와 혼합되어 A와 B를 구별할 수 없게 됩니다.

하지만 세 번째 히든 유닛을 추가하면 문제가 해결됩니다. 이때 신경망은 데이터를 다음과 같은 표현으로 변환할 수 있습니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

이때 초평면을 사용하여 A와 B를 분리할 수 있습니다.

원리를 더 잘 설명하기 위해 간단한 1차원 데이터 세트를 예로 들어보겠습니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

이 데이터 세트를 분류하려면 두 개 이상의 히든 유닛 레이어로 구성된 히든 유닛을 사용해야 합니다. 두 개의 은닉 단위를 사용하는 경우 아름다운 곡선을 사용하여 데이터를 표현할 수 있으므로 직선을 사용하여 A와 B를 구분할 수 있습니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

이 작업은 어떻게 수행되나요? 신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림이면 숨겨진 유닛 중 하나가 활성화되고, 신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림이면 다른 숨겨진 유닛이 활성화됩니다. 이전 히든 유닛이 활성화되고 다음 히든 유닛이 활성화되지 않은 경우, 이는 A에 속하는 데이터 포인트라고 판단할 수 있다.

5. 다양체 가설

실제 데이터 세트(예: 이미지 데이터)를 처리하는 데 다양체 가설이 의미가 있나요? 나는 그것이 의미가 있다고 생각합니다.

다양성 가설은 자연 데이터가 임베딩 공간에서 저차원 다양체를 형성한다는 것을 의미합니다. 이 가설은 이론적, 실험적 뒷받침을 가지고 있습니다. 다양체 가설을 믿는다면 분류 알고리즘의 작업은 얽힌 다양체 세트를 분리하는 것으로 귀결됩니다.

이전 예에서는 한 클래스가 다른 클래스를 완전히 둘러쌌습니다. 그러나 실제 데이터에서는 개 이미지 다양체가 고양이 이미지 다양체에 완전히 둘러싸여 있을 가능성은 거의 없습니다. 그러나 다음 섹션에서 설명하는 것처럼 다른 보다 합리적인 토폴로지 상황도 여전히 문제를 일으킬 수 있습니다.

6. 링크와 호모토피

이제 또 다른 흥미로운 데이터 세트인 두 개의 연결된 토러스(토리), A와 B에 대해 이야기하겠습니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

앞서 이야기한 데이터 세트 상황과 유사하게, n+1 차원을 사용하지 않고는 n차원 데이터 세트를 분리할 수 없습니다(이 예에서는 n+1 차원이 4차원입니다).

링크 문제는 위상수학의 매듭 이론에 속합니다. 때때로 우리는 연결고리를 보고 그것이 끊어진 연결고리인지 바로 알 수 없습니다(연결해제란 서로 얽혀있지만 지속적인 변형을 통해 분리될 수 있다는 것을 의미합니다).

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

더 간단한 깨진 링크

히든 레이어에 3개의 히든 유닛만 있는 신경망이 데이터 세트를 분류할 수 있다면 이 데이터 세트는 깨진 링크입니다. 은닉 유닛이 3개만 있는 신경망으로 분류됩니까?

매듭 이론의 관점에서 신경망이 생성한 데이터 표현의 지속적인 시각화는 멋진 애니메이션일 뿐만 아니라 링크를 풀어내는 과정이기도 합니다. 토폴로지에서는 이것을 원래 링크와 분리된 링크 사이의 주변 동위원소라고 부릅니다.

다양체 A와 다양체 B 사이의 주변 동형은 연속 함수입니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

각각은 X의 동형입니다. A를 B에 매핑하는 특성 함수입니다. 즉, A를 자신에게 매핑하는 것에서 A를 B로 매핑하는 것으로 끊임없이 전환하는 것입니다.

정리: 다음 세 가지 조건이 동시에 충족되는 경우: (1) W는 비단수형입니다. (2) 은닉층의 뉴런 순서는 수동으로 배열할 수 있습니다. (3) 은닉 단위의 수가 더 많습니다. 1보다 크면 신경망과 신경망의 입력 네트워크 계층에서 생성된 표현 사이에 랩어라운드 추적이 있습니다.

증명: 우리는 또한 단계별로 진행합니다:

1. 가장 어려운 부분은 선형 변환입니다. 선형 변환을 달성하려면 W가 양의 행렬식을 가져야 합니다. 우리의 전제는 행렬식은 0이 아니며 행렬식이 음수이면 두 개의 숨겨진 뉴런을 교환하여 이를 양수로 바꿀 수 있다는 것입니다. 양의 행렬식 행렬의 공간은 경로 연결되어 있으므로 신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림이 있으므로 신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림, 신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림이 있습니다. 함수 신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림를 사용하면 x에 시간 t의 각 지점에서 연속 전이 행렬을 곱하여 고유함수를 W 변환으로 연속적으로 전환할 수 있습니다.

2. 신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림함수를 통해 특성 함수에서 b번역으로 전환할 수 있습니다.

3. 기능신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림을 통해 특징적인 기능에서 포인트별 적용으로 전환할 수 있습니다.

다음 질문에 관심이 있는 사람이 있을 것 같습니다. 이 주변 동위원소를 자동으로 발견하고 일부 다른 링크의 동등성 또는 일부 링크의 동등성을 자동으로 증명할 수 있는 프로그램을 개발할 수 있습니까? 또한 이 점에서 신경망이 현재의 SOTA 기술을 능가할 수 있는지 알고 싶습니다.

지금 이야기하고 있는 연결 형태는 아마도 실제 데이터에는 나타나지 않을지 모르지만, 실제 데이터에는 고차원적인 일반화가 있을 수 있습니다.

링크와 매듭은 모두 1차원 다양체이지만 이를 분리하려면 4차원이 필요합니다. 마찬가지로 n차원 다양체를 분리하려면 더 높은 차원의 공간이 필요합니다. 모든 n차원 다양체는 2n+2차원으로 분리될 수 있습니다.

7. 간단한 방법

신경망의 경우 가장 간단한 방법은 얽혀 있는 다양체를 직접 떼어내고, 얽힌 부분을 최대한 얇게 만드는 것입니다. 이것이 우리가 추구하는 근본적인 해결책은 아니지만 상대적으로 높은 분류 정확도를 달성하고 상대적으로 이상적인 로컬 최소값을 달성할 수 있습니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

이 접근 방식을 사용하면 스트레칭하려는 영역에서 매우 높은 파생 상품이 생성됩니다. 이 문제를 해결하려면 데이터 포인트 레이어의 파생물에 페널티를 주는 축소 페널티를 사용해야 합니다.

로컬 최소값은 위상 문제를 해결하는 데 유용하지 않지만, 위상 문제는 위 문제를 탐색하고 해결하는 데 좋은 아이디어를 제공할 수 있습니다.

반면, 좋은 분류 결과만을 추구한다면, 다양체의 작은 부분이 다른 다양체와 얽혀 있으면 문제가 될까요? 분류 결과에만 관심이 있다면 이는 문제가 되지 않는 것 같습니다.

(이런 지름길을 택하는 것은 좋지 않고 쉽게 막다른 골목으로 이어질 수 있다는 것이 내 직감이다. 특히 최적화 문제에서 국소 최소값을 구하는 것은 실제로 문제를 해결하지 못하며, 그렇게 하는 국소 최소값을 선택하면 실제로 문제를 해결하지 못하면 솔루션은 결국 좋은 성능을 달성하지 못할 것입니다.)

8. 다양한 조작에 더 적합한 신경망 계층을 선택합니까?

표준 신경망 계층은 아핀 변환과 점별 활성화 함수를 사용하기 때문에 다양체를 조작하는 데 적합하지 않다고 생각합니다.

완전히 다른 신경망 계층을 사용할 수 있을까요?

생각나는 한 가지 아이디어는 먼저 신경망이 다양체를 이동하려는 방향인 벡터장을 학습하게 하는 것입니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

그런 다음 이를 기반으로 공간을 변형합니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

고정점에서 벡터장을 학습하고(훈련 세트에서 일부 고정점을 앵커로 선택) 이를 어떻게든 보간할 수 있습니다. 위 벡터 필드의 형식은 다음과 같습니다.

신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림

where 및 는 벡터이고 n차원 가우스 함수입니다. 이 아이디어는 방사형 기저 함수에서 영감을 받았습니다.

9. K-Nearest Neighbor Layer

나의 또 다른 요점은 선형 분리성이 신경망에 대한 과도하고 불합리한 요구 사항일 수 있다는 것입니다. 아마도 k-Nearest Neighbor(k-NN)를 사용하는 것이 더 나을 것입니다. 그러나 k-NN 알고리즘은 데이터 표현에 크게 의존하므로 k-NN 알고리즘이 좋은 결과를 얻으려면 좋은 데이터 표현이 필요합니다.

첫 번째 실험에서는 일부 MNIST 신경망(2계층 CNN, 드롭아웃 없음)을 오류율 1% 미만으로 훈련했습니다. 그런 다음 마지막 소프트맥스 레이어를 버리고 k-NN 알고리즘을 사용했는데, 여러 번 수행한 결과 오류율이 0.1~0.2% 감소한 것으로 나타났습니다.

그러나 이러한 접근 방식은 여전히 ​​​​잘못되었다고 생각합니다. 신경망은 아직 선형 분류를 시도하고 있지만 k-NN 알고리즘을 사용하기 때문에 발생하는 오류 중 일부를 약간 수정하여 오류율을 줄일 수 있습니다.

(1/거리) 가중치로 인해 k-NN은 작동하는 데이터 표현과 구별 가능합니다. 따라서 k-NN 분류를 위해 신경망을 직접 훈련할 수 있습니다. 이는 소프트맥스 레이어와 유사하게 작동하는 "가장 가까운 이웃" 레이어로 생각할 수 있습니다.

우리는 계산 비용이 너무 많이 들기 때문에 각 미니 배치에 대한 전체 훈련 세트를 피드백하고 싶지 않습니다. 미니 배치에 있는 다른 요소의 카테고리를 기반으로 미니 배치의 각 요소를 분류하고 각 요소에 (1/(분류 대상으로부터의 거리))의 가중치를 부여하는 것이 좋은 접근 방식이라고 생각합니다.

안타깝게도 k-NN 알고리즘을 사용하면 복잡한 아키텍처에서도 오류율을 4~5%로 줄일 수 있는 반면, 간단한 아키텍처를 사용하면 오류율이 더 높아집니다. 하지만 하이퍼파라미터에는 많은 노력을 기울이지 않았습니다.

하지만 저는 k-NN 알고리즘이 신경망에 더 적합하기 때문에 여전히 좋아합니다. 우리는 다양체를 분리하기 위해 초평면을 사용한다고 주장하기보다는 동일한 다양체의 점이 서로 더 가까워지기를 원합니다. 이는 서로 다른 범주의 다양체 사이의 공간을 더 크게 만드는 동시에 단일 다양체를 축소하는 것과 같습니다. 이렇게 하면 문제가 단순화됩니다.

10. 요약

데이터의 일부 위상학적 특성으로 인해 (신경망의 깊이에 관계없이) 저차원 신경망을 사용하여 이러한 데이터를 선형적으로 분리할 수 없게 될 수 있습니다. 나선과 같이 기술적으로 실현 가능한 경우에도 저차원 신경망으로는 분리를 달성하기가 매우 어렵습니다.

데이터를 정확하게 분류하기 위해 신경망에는 때때로 더 넓은 계층이 필요합니다. 또한 기존 신경망 레이어는 다양체를 조작하는 데 적합하지 않습니다. 가중치를 수동으로 설정하더라도 이상적인 데이터 변환 표현을 얻기가 어렵습니다. 새로운 신경망 계층, 특히 다양한 관점에서 기계 학습을 이해함으로써 영감을 받은 새로운 신경망 계층은 좋은 지원 역할을 할 수 있습니다.

위 내용은 신경망, 다양체, 토폴로지를 직관적으로 이해하기 위한 18장의 그림의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:51cto.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿